Начиная с GDB 7.5 вы можете использовать эти удобные удобные функции :
$_memeq(buf1, buf2, length)`
$_streq(str1, str2)
$_strlen(str)
$_regex(str, regex)
Кажется гораздо менее проблематичным, чем выполнение "чужого" strcmp()
в стеке процесса каждый раз при достижении точки останова.
Обратите внимание, что ваша GDB должна быть скомпилирована с поддержкой Python, что не является проблемой для текущих дистрибутивов Linux.Конечно, вы можете проверить это, запустив show configuration
внутри GDB и выполнив поиск --with-python
.Этот маленький oneliner тоже делает свое дело:
$ gdb -n -quiet -batch -ex 'show configuration' | grep 'with-python'
--with-python=/usr (relocatable)
Для вашего демонстрационного случая, использование будет
break <where> if $_streq(x, "hello")
или, если ваша точка останова уже существует, и вы просто хотитечтобы добавить к нему условие
condition <breakpoint number> $_streq(x, "hello")
$_streq
соответствует только всей строке, поэтому, если вы хотите что-то более хитрое, вы должны использовать $_regex
, который поддерживает синтаксис регулярного выражения Python .