Переход на номер строки в lldb

Как вы переходите к конкретной исходной строке в lldb? В gdb это будет «jump X», где X — номер строки, но единственная ссылка, которую я могу найти для lldb, — это http://lldb.llvm.org/lldb-gdb.html который говорит:

Пропустить 8 байтов перед текущим счетчиком программы (инструкция
указатель). Обратите внимание, что мы используем обратные тики для оценки выражения и
вставить скалярный результат в LLDB.

(gdb) jump *$pc+8
(lldb) register write pc `$pc+8`

FWIW, в MacOS замена «pc» на «rip», кажется, работает.

Но использование этого метода кажется довольно сложным. Есть ли лучший способ перейти в lldb?

2

Решение

Пример того, как сделать это в Python, был добавлен в репозиторий lldb пару дней назад. Увидеть http://llvm.org/svn/llvm-project/lldb/trunk/examples/python/jump.py

Сохраните содержимое этого файла в вашем домашнем каталоге, может быть что-то вроде ~/lldb/jump.py и загрузите его в свой lldb с помощью команды вроде

command script import ~/lldb/jump.py

(или поместите это в свой ~/.lldbinit файл), и вы будете иметь jump команда.

Обратите внимание, что с помощью ARC (автоматического подсчета ссылок) в программах Objective-C вы можете легко испортить вашу программу SUPER, перепрыгивая — многие прыжки, которые выглядят безвредными, на самом деле не так. Это определенно относится к категории «хитрости пользователя» / «удачи с этим» приемами отладчика.

2

Другие решения

В качестве обновления я оставляю здесь новую функцию из учебника LLDB: http://lldb.llvm.org/tutorial.html

Наконец, lldb запускает режим пошагового выхода из строки или кадра:
(lldb) нить до 100

Эта команда будет запускать поток в текущем кадре до тех пор, пока он не достигнет строки 100 в этом кадре, или остановится, если покинет текущий кадр. Это довольно близкий эквивалент команды GDB «до».

Таким образом, (lldb) thread until <lineno> делает трюк для текущего потока.

Также, (lldb) help thread until содержит дополнительные опции.

1

По вопросам рекламы [email protected]