Команды и окончания LLDB Breakpoint - PullRequest
0 голосов
/ 09 мая 2019

Можно ли запускать команды после точки останова после выполнения «продолжающейся» команды. Например я делаю что-то вроде:

br set -n function -C finish -C something_else

Тогда я получаю ошибку

error: Aborting reading of commands after command #1: 'finish' continued the target.

Как люди обходят это? Я думаю, я мог бы установить другую точку останова в инструкции возврата и как часть ее команды заставить ее удалить себя, но у меня нет способа узнать идентификатор bp, который мне нужно удалить. Кроме того, это условная точка останова, поэтому я не могу просто всегда прерывать инструкцию return и не могу условно сломать инструкцию return, потому что контекст, который я использовал для прерывания функции, исчез.

1 Ответ

1 голос
/ 10 мая 2019

Вы не можете сделать это в настоящее время.Интерпретатор команд lldb не является повторно входящим, и, поскольку ваш finish вполне может достичь другой точки останова своими собственными командами, lldb завершает чтение первого набора команд точки останова, когда одна из них продолжается.

Вы не делаетев его командах необходимо удалить точку останова возврата, просто сделайте ее точкой останова одним выстрелом (break set -o true), а когда ее ударили, она просто удалит себя.

Обратите внимание: если ваша программа многопоточная и вы останавливаетесь в коде, через который многие потоки могут проходить одновременно, вам действительно нужно сделать свою точку останова на возвращаемом потоке специфичной для текущего потока.Это на самом деле немного сложно сделать в командной строке lldb, но вы можете сделать это довольно легко, используя обратные вызовы точки останова Python:

https://lldb.llvm.org/use/python-reference.html#running-a-python-script-when-a-breakpoint-gets-hit

...