回答:
使用できますstrcmp
:
break x:20 if strcmp(y, "hello") == 0
20
行番号で、x
任意のファイル名とy
任意の変数を指定できます。
No symbol "strcmp" in current context.
run
。動的ライブラリが読み込まれるように、それを実行する必要があります。ソースについては、それを
$_streq
@tlwhitecのメソッドの方が優れています。
GDB 7.5以降、次のネイティブの便利な関数を使用できます。
$_memeq(buf1, buf2, length)
$_regex(str, regex)
$_streq(str1, str2)
$_strlen(str)
strcmp()
ブレークポイントに到達するたびにプロセスのスタックで「外部」を実行する必要がある場合よりも、問題はかなり少ないようです。これは、マルチスレッドプロセスのデバッグに特に当てはまります。
GDBはPythonサポートでコンパイルする必要があることに注意してください。これは、現在のLinuxディストリビューションでは問題ではありません。確かに、
show configuration
GDB内で実行してを検索することで確認できます--with-python
。この小さなワンライナーもトリックを行います:$ 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正規表現構文をサポートするを使用する必要があります。
strncmp
およびstrstr
は、その他の便利なCクエリ関数です。