Запустите gdb, введите help next
или help nexti
, и вы увидите описание команды next
, которая в основном продвигается в вашей программе.
Что вы можете сделать, это установить точку останова в начале функции, а затем оттуда запустить программу шаг за шагом (используя next
) и посмотреть, где она выходит из функции.
Если программа огромная, вы можете выполнить двоичный поиск точки возврата. Для этого устанавливается точка останова в начале функции, а затем оттуда, например, next 500
. Если вы вышли из функции, вы сделали слишком много шагов, поэтому начните сначала и в следующий раз сделайте меньший шаг, например next 250
. Если бы вы все еще были в функции, вы могли бы сделать больше и подвести итоги, чтобы узнать, как далеко вы продвинулись. Поэтому, если вы в другой раз скажете next 500
и у вас не будет работы, вы начнете все сначала, а на этот раз начнете с next 750
. Вы поняли идею.
Редактировать 1: использовать step
вместо next
для входа в функции.
Редактировать 2: Попробуйте посмотреть, работает ли он:
Поставьте разрыв в начале функции и войдите в нее. Затем (в GDB, конечно) введите finish
для запуска до завершения функции. Затем (это та часть, в которой я не уверен, что она будет работать правильно), введите reverse-step
и вернитесь назад к выполнению, чтобы увидеть, где вышла функция! (Как это круто?!)