GDB не входит в функцию при использовании команды "s" - PullRequest
0 голосов
/ 12 июня 2018

У меня проблема с GDB, когда я использую «s» для перехода к функции, вызываемой из основного, GDB переходит к другой функции, не показывая мне нужную мне функцию.Чтобы было ясно, я использую шаг здесь:

в main.c

short c= get(a,b);

Теперь get имеет код из 36 строк, а в строке 27 он вызывает другую функцию "swap" здесь:

в get.s

call _swap;

Когда я использую шаг (ы) с gdb для "get", он перебирает все функции get и показывает мне функцию _swap.Это 3 разных файла: main.c get.s swap.c, скомпилированный таким образом:

gcc -g -m32 main.c swap.c get.s -o IA-main

-m32, потому что get.s это сборка IA-32.Вопрос в том, «почему он переходит« получить »функцию, и он показывает мне только« _swap »?

Я могу опубликовать код при необходимости. Я работаю на Mac OS Sierra 10.12.6, поэтому GDB немного раздражает.

1 Ответ

0 голосов
/ 12 июня 2018

С http://sourceware.org/gdb/onlinedocs/gdb/Continuing-and-Stepping.html (выделено мной)

step

Продолжайте запускать программу, пока управление не достигнет другой строки источника, затем остановитеэто и вернуть контроль в ГБД.Эта команда сокращенно s.

Предупреждение: Если вы используете команду шага, когда управление находится внутри функции, которая была скомпилирована без отладочной информации, выполнение продолжается до тех пор, пока управление не достигнет функции, имеющей отладочную информацию. Аналогично, он не перейдет в функцию, которая компилируется без отладочной информации. Для пошагового выполнения функций без отладочной информации используйте команду stepi , описанную ниже.

Вместо нее можно использовать команду stepi:

stepi

stepi arg

si

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

Часто полезно сделать 'display / i $ pc' при пошаговом выполнении машинных инструкций.Это заставляет GDB автоматически отображать следующую инструкцию, которая будет выполнена, каждый раз, когда ваша программа останавливается.См. Автоматическое отображение.

Аргумент представляет собой счетчик повторений, как на шаге.

...