私は現在、いくつかのファイルを持つプログラムをデバッグしています:arr.hはリストクラスのヘッダファイルです(ランダムに生成されます)。 Howard.cppは実装ファイルで、main.cppはlistクラスのオブジェクトに関数を呼び出すmain関数を置く場所です。 list.hが含まれています。私は自分の関数の1つ(Howard.cpp内で実装されている)に対してsegフォルトを取得しています。私はGDBに入った。 segフォルトが発生すると、segフォールトに至る関数呼び出しを取得するための "where"または "list"を入力することがわかります。この場合、segフォルトが発生した関数(フレーム0)に到達すると、変数とその値がその関数に含まれているかどうかを確認する必要があります。しかし、私がその特定の関数に入るか、 "info locals"と入力すると、 "No symbol table info available"というメッセージが表示されます。私はこれが真実ではないことを知っていますが、失敗した行を見る方法を理解できません。さらに、その関数/ファイルに関する行情報は表示されません。私は、実行可能ファイルではないファイル内の関数にエラーがあることと関係があると思います。しかし、私はこれについて何ができますか?この質問がまったく混乱している場合は、私に明確に説明してください。私はこれですべてかなり新しいです。GDBで複数のリンクされたファイルを使ったデバッグ
これは私のクラスの教授が作成し、リンクリストと再帰を実践するためのLinux端末環境にあります。
[OK]を、私はここに例を含めるつもりです:
私はそれを再帰的にコピー逆にリンクリストの配列の機能を持っています。再帰関数はtable :: reverse_table(ノード* &、ノード*、ノード*)と呼ばれます。私は停止点に問題がないことを知っているところまでデバッグしました。ときにプログラムセグメンテーション違反、私は「どこ」と入力しますと、それが出力されます:私が入力したときに
#0 0x0000000000400e6e in table::reverse_table(node*&, node*, node*)()
#1 0x0000000000400df1 in table::reverse_table(node*&, node*, node*)()
#2 0x0000000000400df1 in table::reverse_table(node*&, node*, node*)()
#3 0x0000000000400df1 in table::reverse_table(node*&, node*, node*)()
#4 0x0000000000400df1 in table::reverse_table(node*&, node*, node*)()
#5 0x0000000000400df1 in table::reverse_table(node*&, node*, node*)()
#6 0x0000000000400df1 in table::reverse_table(node*&, node*, node*)()
#7 0x0000000000400df1 in table::reverse_table(node*&, node*, node*)()
#8 0x0000000000400df1 in table::reverse_table(node*&, node*, node*)()
#9 0x0000000000400df1 in table::reverse_table(node*&, node*, node*)()
#10 0x0000000000400df1 in table::reverse_table(node*&, node*, node*)()
#11 0x0000000000400df1 in table::reverse_table(node*&, node*, node*)()
#12 0x0000000000400f87 in table::reverse_table(table&, int, int)()
#13 0x0000000000400fe7 in table::reverse_table(table&)()
#14 0x0000000000401087 in main()
はその後、「フレーム0を、」それが表示されます。
#0 0x0000000000400e6e in table::reverse_table(node*&, node*, node*)()
私は「情報を入力すると「地方」を選択すると、「シンボルテーブルの情報がありません」と表示されます。私はsegfaultがどこで機能したかについての情報を得ることができません。 GDBはその情報を持っていないようです。デバッグ中にそれを含めるために必要なことはありますか?
SSCCE(http://sscce.org/)を追加すると、より明確になります。 –
は、デバッグ中に見たgdbメッセージを追加しました。うまくいけばそれは十分な情報です。コードを投稿したいとは思っていません。なぜなら、自分の問題を解決しようとしているだけであるとは思わないからです。自分の問題を自分でデバッグする方法を見つけようとしています。 – hhoward