Могу ли я указать, что я хочу, чтобы gdb разрывался в строке x, когда он char* x
указывает на строку, значение которой равно "hello"
? Если да, то как?
c
debugging
gdb
conditional-breakpoint
341008
источник
источник
strncmp
иstrstr
другие полезные функции C-запросов.Ответы:
Вы можете использовать
strcmp
:20
номер строки,x
может быть любым именем файла иy
любой переменной.источник
No symbol "strcmp" in current context.
run
, чтобы загружать динамические библиотеки. Для источника, Google это и найти: stackoverflow.com/questions/10000335/… :-)$_streq
метод от @tlwhitec лучше.В некоторых реализациях gdb может не знать тип возвращаемого значения strcmp. Это означает, что вы должны были бы сыграть, иначе это всегда было бы верным!
источник
Начиная с GDB 7.5 вы можете использовать следующие удобные функции :
Это кажется менее проблематичным, чем выполнение «чужого»
strcmp()
в стеке процесса при каждом достижении точки останова. Это особенно верно для отладки многопоточных процессов.Для вашего демонстрационного случая, использование будет
или, если ваша точка останова уже существует, и вы просто хотите добавить к ней условие
$_streq
соответствует только всей строке, поэтому, если вы хотите что-то более хитрое, вы должны использовать$_regex
, который поддерживает синтаксис регулярных выражений Python .источник