GNU/Linux >> Linux の 問題 >  >> Linux

C++ std::string 等値などの任意の型に対する GDB 条件付きブレークポイント

<ブロック引用>

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

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

condition 1 strcmp(myObject->myStringVar.c_str(),"foo") == 0

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

しかし、このケースの問題は operator== に関係していると思います 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

Linux
  1. Linux 上の gdb 用にプログラムで C または C++ コードにブレークポイントを設定する

  2. libstdc++.so.6 の std::string::assign() メソッドでの奇妙な SIGSEGV セグメンテーション違反

  3. 内部からC++ Linuxプログラムのフルパスを見つける方法は?

  1. Linux bash、ダッシュで区切るキャメルケース文字列

  2. C++ コマンド ライン インターフェイス

  3. bash の文字列からすべての特殊文字と大文字と小文字を削除します

  1. GNUデバッガーの5つのヒント

  2. C++ Linux でクリップボードから文字列を取得する

  3. 正規表現のグループ化は C++ 11 の正規表現ライブラリと一致します