2015-09-24 5 views
0

Я пытаюсь устранить ошибку шины с помощью встроенной сборки SSE2. Исходный код имеет макрос, который использует 5 указателей, и я подозреваю, что один из них не выровнен.Что такое «здесь» GDB?

Я установил точку останова на исходной строке. Но когда я выполняю команду disass, она разбирается с верхней части функции, а не там, где отладчик остановлен. Есть сотни линий сборки, поэтому это не очень полезно для меня. Нажатие ENTER От 30 до 40 раз в ответ на «Нажмите ENTER для продолжения» очень быстро встал.

Я пробовал disass $pc, но он был снят с верхней части функции. Я также попробовал disass . (с точкой означает «здесь»), но это привело:

A syntax error in expression, near `.'. 

Что GDB используется для обозначения «здесь»?

ответ

0

Вы указали верность с использованием $pc, чтобы представлять текущее местоположение. Причина, по которой это не делала то, что вы ожидали при использовании с командой disassemble, состоит в том, что команда disassemble пытается по умолчанию разобрать функцию, содержащую данный адрес, который вы видите.

Существуют альтернативные формы, которые могут быть предоставлены, чтобы разобрать, например start,end, где start и end являются адресами, или start,+length, где start является адресом и length является числом байтов.

Попробуйте help disassemble в командной строке gdb для получения дополнительной информации.

В качестве альтернативы вы можете также использовать команду x (исследовать), чтобы отобразить инструкции, без смарта найти начало поведения функции, так x/10i $pc будет отображать 10 инструкции, начиная с $pc. Это может быть полезно, если вы хотите, чтобы инструкции были разобраны, однако у вас нет доступа к модификаторам /m или /r, которые доступны в команде disassemble. Эти модификаторы отображают перемеженный источник и ассемблер (для /m) или необработанные байты команд (для /r).

Кроме того, если весь нажмите клавишу ВВОД, чтобы продолжить дело стареет, то вы можете попробовать set height 0 выключить пейджер, не убедитесь, что у вас есть достаточно прокрутки назад в терминале, хотя :)

+0

Спасибо Эндрю. Да, я тоже читал справочную страницу. Но вопрос в том, что: «Что GDB использует для обозначения здесь?» * Если GDB не имеет понятия «здесь» (например, WindDBG), тогда укажите его и скажите, что его невозможно разобрать на точка, в которой отладчик остановлен. – jww

+0

ОК, я продлил ответ, чтобы конкретно указать ваш вопрос. – Andrew

Смежные вопросы