13

条件式に任意のクラス型のオブジェクトが含まれる GDB に条件付きブレークポイントを設定することは可能ですか?

オブジェクトのメンバー文字列変数が「foo」と等しいかどうかを条件がチェックする関数内にブレークポイントを設定する必要があります。したがって、次のようなものです:

condition 1 myObject->myStringVar == "foo"

しかし、それは機能していません。GDB はプリミティブ型と char* 型の条件付きブレークポイントのみを許可しますか? 非プリミティブ型に条件付きブレークポイントを設定する方法はありますか?

4

2 に答える 2

13

非プリミティブ型に条件付きブレークポイントを設定する方法はありますか?

はい、それを行う1つの方法は、非プリミティブ型をプリミティブ型に変換し、この場合はに変換しchar*、を使用strcmpして文字列を比較することです。

condition 1 strcmp(myObject->myStringVar.c_str(),"foo") == 0
于 2012-05-29T15:15:35.237 に答える
11

あなたが尋ねたあなたの質問への答えはイエスです...一般的なケースでは、任意のクラスと関数、およびクラスメンバー関数に対して機能します。プリミティブ型のテストに行き詰まっていません。のようなクラス メンバーのオーバーロードは機能operator==するはずです。

operator==しかし、この場合の問題は、 for std::string がグローバルなテンプレート化された演算子のオーバーロードであることに関係していると思います:

http://www.cplusplus.com/reference/string/operators/

したがって、宣言は次のようになります。

template<class charT, class traits, class Allocator>
    bool operator==(const basic_string<charT,traits,Allocator>& rhs,
                const charT* lhs );

gdb がその点を接続する方法を知らなくても、私は驚かないでしょう。

@ ks1322 が言ったことに加えて、C++ 領域に留まり、より単純にstd::string::compare()を使用できることに注意してください。

condition 1 myObject->myStringVar.compare("foo") == 0
于 2012-05-29T16:29:57.557 に答える