Как сравнить хранимую строковую переменную в GDB? - PullRequest
14 голосов
/ 15 сентября 2011

У меня есть переменная с именем x в GDB, которую я хочу сравнить со строкой.

gdb $ print $x
$1 = 0x1001009b0 "hello"

но сравнение с

if $x == "hello"

не работает.

1 Ответ

21 голосов
/ 15 сентября 2011

И, как указывает @tlwhitec: Вы также можете использовать встроенную функцию $_streq(str1, str2):

(gdb) p $_streq($x, "hello")

Эта функция не требует настройки GDB с поддержкой Python, что означает, что онивсегда доступен.

Более удобные функции можно найти в https://sourceware.org/gdb/onlinedocs/gdb/Convenience-Funs.html. Или используйте

(gdb) help function

, чтобы распечатать список всех вспомогательных функций.


Для старых GDB, в которых отсутствует встроенная функция $_streq, вы можете определить собственное сравнение

(gdb) p strcmp($x, "hello") == 0
$1 = 1

Если вам не повезло, что программа не запущена (выполняя основной файл или что-то в этом роде), вы можете сделать что-то для следующего: если ваш gdb достаточно новый, чтобы иметь python:

(gdb) py print cmp(gdb.execute("output $x", to_string=True).strip('"'), "hello") == 0
True

или:

(gdb) define strcmp
>py print cmp(gdb.execute("output $arg0", to_string=True).strip('"'), $arg1)
>end
(gdb) strcmp $x "hello"
0
...