Как вы переходите к конкретной исходной строке в 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?
Пример того, как сделать это в 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, перепрыгивая — многие прыжки, которые выглядят безвредными, на самом деле не так. Это определенно относится к категории «хитрости пользователя» / «удачи с этим» приемами отладчика.
В качестве обновления я оставляю здесь новую функцию из учебника LLDB: http://lldb.llvm.org/tutorial.html
Наконец, lldb запускает режим пошагового выхода из строки или кадра:
(lldb) нить до 100Эта команда будет запускать поток в текущем кадре до тех пор, пока он не достигнет строки 100 в этом кадре, или остановится, если покинет текущий кадр. Это довольно близкий эквивалент команды GDB «до».
Таким образом, (lldb) thread until <lineno>
делает трюк для текущего потока.
Также, (lldb) help thread until
содержит дополнительные опции.