回答:
使用できます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 configurationGDB内で実行してを検索することで確認できます--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クエリ関数です。