Более высокие номера строк не разрешаются как точки останова при отладке с использованием lldb

Я пытаюсь установить точки останова в программе MIPS32r6, которая вычисляет множество Мандельброта в Brainfsck. Сама программа написана на C++, скомпилирована с Clang, а я отлаживаю с LLDB.

Проблема, с которой я сталкиваюсь, заключается в том, что, находясь в LLDB, я могу устанавливать определенные контрольные точки, в основном на нижних номерах строк, без проблем. Однако после строки № 70 в Main.cpp точки останова становятся "неразрешенными" (хотя при выполнении списка точек останова они отображаются с вполне приемлемыми адресами). Иными словами, все точки останова, которые я пытаюсь установить после строки № 70, становятся нерешенными, и все разумные точки останова до строки № 70 разрешаются без проблем.

Я поместил копию двоичного файла, который я связал здесь: http://filebin.ca/2tJzo2LLBJWO/MipsTest.bin

И копию Main.cpp здесь: https://paste.ee/p/WYs8Y

Я строю со следующими вариантами:

clang -mcompact-branches=always -fasynchronous-unwind-tables -funwind-tables -fexceptions -fcxx-exceptions -mips32r6 -O0 -g -glldb ...

lld --discard-none -znorelro --eh-frame-hdr ...

На данный момент я не уверен, что может быть причиной этой проблемы.

2 ответа

Используя ваш пример двоичного файла, я получаю:

(lldb) b s -l 72
Breakpoint 1: where = MipsTest.bin`main + 544 at Main.cpp:72, address = 0x000134a0

Итак, мы нашли адрес для точки останова. Если он не разрешен во время работы, это означает, что мы не смогли реализовать точку останова по этому адресу (например, по какой-то причине не удалось записать ловушку в память программы).

Я бы попробовал сделать target modules dump line-table Main.cpp в lldb, чтобы увидеть, как lldb думает, как выглядит таблица строк. Затем посмотрите на таблицу строк DWARF двоичного файла с чем-то вроде readelf --debug-dump=decodedline MipsTest.bin (Я думаю, что это правильно - я смотрю на главную страницу сайта в Интернете).

Другие вопросы по тегам