2016-11-15 4 views
0

Есть ли способ выполнить выполнение в gdb до тех пор, пока функция не будет вызвана, а затем не будет приостановлена ​​внутри этой функции? Мне больно использовать n и s для кода, с которым я работаю. Я бы предпочел nextFrame и fin, предположив, что существует nextFrame, который взял меня в новую функцию. Было бы здорово, если бы nextFrame мог сказать мне, когда мы только разматываем стек из текущей области, то есть мы не выполняем другой вызов функции, а затем он может приостановиться в последней строке текущей области.gdb продолжает выполнение до появления нового кадра в стеке вызовов

В принципе, я хочу просмотреть свою кодовую базу с точки зрения вызова, а не из строковой точки зрения.

P.S. Если предположить, что такое средство существует, я бы предположил, что его проблематично использовать с boost. Например. если у меня есть строка, как boost::shared_ptr<MyType> a = foo();, тогда она сначала остановится внутри кода boost, прежде чем она закроется внутри foo(). Это проблема, потому что меня не интересует код повышения и только хочу посмотреть, что внутри foo.

P.S. Я тоже звонил. Интересно, возможно ли это в clang.

+2

Вы можете настроить GDB так: установить точки останова для всех функций (символов), если у вас есть отладочная информация, или для автоматического перехода на вас и разрыва инструкций и эквивалентов 'call' и' ret'. Многочисленные реализации этих подходов существуют там. –

+0

@MichaelFoukarakis Спасибо, это звучит интересно –

ответ

0

Используйте b function_name, чтобы применить точку останова внутри функции. Ваша программа в процессе выполнения приостанавливается при входе в эту функцию. Альтернативно Вы также можете использовать b filename:line_number, чтобы приостановить выполнение вашей программы на определенной строке в файле.

+0

Это не лучшая альтернатива следующему и шагу –