C++プログラムでGDBを使用する際に問題があります。クラスメンバー関数にブレークポイントを設定したいのですが、その方法の構文がわかりません。私のプログラムは現在機能しており、GDBの使い方を習得しようとしています。私の問題は、オンラインで見つけたすべての情報が本当にmain()ファイルだけを扱っており、他の関数やクラスは扱っていないことです。それらがクラスに関係している場合は、void returnステートメントを持つ関数のみを使用しています。
二分探索木クラスがあります。プログラムの関数にブレークポイントを設定したい。これが私のヘッダーファイルのセクションです。
class BST
{
BST()
...
private:
int add((BST * root, BST *src);
}
私は学校のコマンドラインLinuxサーバーにtelnet接続しています。プログラムでGDBをg ++ -g * .cppで正常に実行できます(正常に機能している他のファイルがあります)。ファイルはa.outとして保存されます。私はGDBを実行しています
gdb ./a.out
そして私はGDBに入ります。 void表示関数のブレークポイントは、
b BST::disp_block()
しかし、私が試した追加機能でどうやってそれを行うのですか
b BST::int add(BST*, BST *)
b int BST::add(BST*, BST *)
b BST::add(BST*, BST *)
と私は引数名で試してみました
b BST::int add(BST * root, BST * src)
b int BST::add(BST * root, BST * src)
b BST::add(BST * root, BST * src)
エラーが出続けます
Function "____" not defined.
Make break point pending on future shared library load? (y or [n])
このようなメンバー関数にブレークポイントを設定するにはどうすればよいですか?ウォッチポイントも同じ形式であると想定していますが、説明できない場合もあります。
Dark Falconが言ったように、オーバーロードがなければbreak BST::add
は動作するはずです。
次のように入力することもできます。
(gdb) break 'BST::add(<TAB>
(一重引用符に注意してください)。これにより、GDBにタブ補完を実行するように指示し、次のように行を終了します。
(gdb) break 'BST::add(BST*, BST*)
また、終了点'
'を追加してEnterキーを押し、ブレークポイントを追加できます。
Void表示関数のブレークポイントを取得できます
関数の戻り値の型はシグネチャの一部ではなく、nothingが発生していることに関係しています。
クラスに名前空間が定義されている場合は、名前空間を指定する必要がある場合があります。標準の名前空間std以外の場合。正しいバイナリを実行している場合、ファイル名はオプションです。シンボルが実行可能ファイルに存在するかどうかを確認できます。 「nm -C」コマンド。ここで、-CはC++の名前のマングリングを処理します。
例で要約すると、名前空間が「mySpace」で、クラスが「X」で、メンバーが「Y」の場合、ブレークポイントは次のようになります。「(gdb)b mySpace :: X :: Y 」