В Gdb как установить условную точку останова для 3-й строки функции - PullRequest
3 голосов
/ 10 июня 2010

Как я могу установить условную точку останова для 3-й строки функции в GDB?

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

Ответы [ 2 ]

3 голосов
/ 16 июня 2010

Как насчет определения вашего собственного командного файла для gdb, а затем просто его получения во время отладки?Это помогло бы уменьшить изрядное количество печатания.Попробуйте это:

Создайте файл, назовем его mydef и вот его содержимое:

define cmd
  b function-where-you-want-to-break
  r
  b +2
  c
end

Как только вы загрузите исполняемый файл в gdb, введите source mydef в приглашении gdb и затем cmd

Теперь вы находитесь во 2-й строке, откуда началась функция.:) Надеюсь, это поможет!

3 голосов
/ 10 июня 2010

Условные точки останова


Введите следующее,
при условии, что вы должны применить точку останова в строке внутри функции

(gdb) break <function-name>

GDB ответит следующим образом Точка останова 1 в 0xaddr: имя файла, номер белья.

Запишите номер точки останова
(в данном случае это 1 )

Введите следующую команду
(замените номер точки останова соответствующим образом)

(gdb) condition 1 <condition>

Во время выполнения вы можете пропустить (переход) к 3-й строке, дважды используя команду next

(gdb) next
(gdb) next

.. и вы на третьей строке функции !!

UPDATE:

Кроме того, чтобы разбить, когда переменная изменяет значение, используйте это:

(gdb) watch variable==value

Для более подробной информации, пожалуйста, обратитесь:
- GDB: условные контрольные точки
- Взлом в исполняемый файл с использованием GDB

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...