[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