[Lldb-commits] [lldb] [lldb] Fix and speedup the `memory find` command (PR #104193)
Dmitry Vasilyev via lldb-commits
lldb-commits at lists.llvm.org
Tue Aug 27 15:28:50 PDT 2024
slydiman wrote:
> It also reads the memory in bulk (up to 1MB)
```
// Maximum number of bytes read (and buffered). We need to read at least
// `size` bytes for a successful match.
const size_t max_read_size = std::max<size_t>(size, 0x10000);
```
It seems the minimal chunk is 64KB and the maximal chunk may be very long (more than 1MB).
Something is wrong with the first memory block in tests
```
Got output:
data found at location: 0x7f6bdf3eb000
0x7f6bdf3eb000: 6e 65 65 64 6c 65 00 00 00 00 00 00 00 00 00 00 needle..........
0x7f6bdf3eb010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
data found at location: 0x7f6bdf3eb800
0x7f6bdf3eb800: 6e 65 65 64 6c 65 00 00 00 00 00 00 00 00 00 00 needle..........
0x7f6bdf3eb810: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
data found at location: 0x7f6bdf3edff9
0x7f6bdf3edff9: 6e 65 65 64 6c 65 00 50 e0 3e df 6b 7f 00 00 6d needle.P.>.k...m
0x7f6bdf3ee009: dd 41 df 6b 7f 00 00 00 00 00 00 00 00 00 00 40 .A.k...........@
no more matches within the range.
Expecting sub string: "data found at location: 0x7f6bdf3e9000" (was not found)
```
Note the capacity=0 is a special case here `llvm::SmallVector<uint8_t, 0> mem;`
I'd recommend
```
const size_t min_read_size = 0x10000;
const size_t max_read_size = std::max<size_t>(size, min_read_size);
llvm::SmallVector<uint8_t, min_read_size> mem;
```
https://github.com/llvm/llvm-project/pull/104193
More information about the lldb-commits
mailing list