Я использую LLDB, мне интересно, как распечатать значение в памяти 0xb0987654?
Как распечатать память в 0xb0987654 с помощью lldb?
Ответ 1
Xcode имеет очень приятное окно Диспетчер памяти, которое очень хорошо отображает содержимое адресов памяти. Он также позволяет вам контролировать группировку байтов и количество отображаемых байтов и перемещать назад или вперед страницу памяти:
Вы можете получить доступ к нему, нажав ⌘⇧M
или
Отладка → Отладка рабочего процесса → Просмотр памяти
Обратите внимание на поле в нижнем левом углу, где вы можете вставить адрес памяти, который вы хотите проверить!
Документация здесь: https://developer.apple.com/library/ios/recipes/xcode_help-debugger/articles/viewing_memory.html
Связанный ответ здесь: Как открыть браузер памяти в Xcode 4?
Ответ 2
В дополнение к Майклу ответ.
Я обычно использую:
memory read -s1 -fu -c10000 0xb0987654 --force
Это будет напечатано в отладчике.
- -s для группировки байтов, поэтому используйте 1 для uint8, например, и 4 для int
- -f для формата. Я по сути забываю правильный символ. Просто поставьте оператор с -f, и он будет привязываться к вам и предоставит вам список всех параметров
- -c для подсчета байтов
- если вы печатаете более 1024 байт, добавьте с помощью --force
Надеюсь, что это поможет.
Ответ 3
"me
" - это команда, которую вы ищете.
Например, эта команда lldb:
me -r -o /tmp/mem.txt -c512 0xb0987654
скопирует 512 байт из вашего адреса памяти в файл на/tmp/mem.txt.
Ответ 4
Вот простой трюк для отображения типизированных массивов фиксированной длины в lldb. Если ваша программа содержит длинную * переменную, которая указывает на 9 элементов, вы можете объявить тип структуры, содержащий фиксированный массив из 9 длинных значений и наведя указатель на этот тип:
long *values = new long[9]{...};
(lldb) expr typedef struct { long values[9]; } l9; *(l9 *)values
(l9) $1 = {
values = {
[0] = 0
[1] = 1
[2] = 4
[3] = 9
[4] = 16
[5] = 25
[6] = 36
[7] = 49
[8] = 64
}
}
Я использую typedef, когда я кодирую в C, это не нужно в С++.