gdb:「シンボルテーブルが読み込まれていません」


90

gdbにブレークポイントを追加しようとすると、このエラーメッセージが表示され続けます。

これらのコマンドを使用してコンパイルしました:

gcc -g main.c utmpib2.c -o main.o
and:
cc -g main.c utmpib2.c -o main.o
and also:
g++ -g main.c utmpib2.c -o main.o

「-g」の代わりに「-ggdb」も試しましたが、それでもエラーメッセージが表示されます。

次に、gdbを実行します。

$gdb

gdbの場合:

(gdb)exec-file main.o
(gdb)break 59
No symbol table is loaded. Use the "file" command.

ああ、main.oを意味しました。更新しました。「-ggdb」も使用してみましたが、それでも同じ問題が発生します。
user994165

gccとgdbを呼び出す方法を正確に示してください。エラーを回避するためにコピーして貼り付けます。
Piotr Praszmo

1
コマンドを更新しました。これは本当に奇妙です。それはちょうど働き始めました。以前は「gdb a.out」を使用してgdbにアクセスしていて、a.outが存在しないなどのエラーメッセージが表示されていました。その後、「exec-file」に切り替えました。今、私はa.outを試してみましたが、「このGDBは「i486-linux-gnu」として構成されました」と表示され、ブレークポイントを設定できます。
user994165 2012

ああ、私は間違ったファイルa.outを指定していました。私はファイル名を自分の名前に変更することを考えずにgdbチュートリアルに従っていました。
user994165 2012

回答:


58

まず最初に、あなたが持っているのは完全にコンパイルされたプログラムであり、オブジェクトファイルではないので、.o拡張機能を削除します。さて、エラーメッセージが言うに注意を払うが、それはわかります正確にあなたの問題を解決する方法:「いいえシンボルテーブルがロードされていない。使用する『ファイル』コマンドを。」

(gdb) exec-file test
(gdb) b 2
No symbol table is loaded.  Use the "file" command.
(gdb) file test
Reading symbols from /home/user/test/test...done.
(gdb) b 2
Breakpoint 1 at 0x80483ea: file test.c, line 2.
(gdb) 

または、コマンドラインでプログラムを渡します。

$ gdb test
GNU gdb (GDB) 7.4
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
[...]
Reading symbols from /home/user/test/test...done.
(gdb) b 2
Breakpoint 1 at 0x80483ea: file test.c, line 2.
(gdb) 

申し訳ありませんが、gdb noobです。このソリューション(およびこの質問の他のソリューションはどれも)は、Windows上のWSL上のgdbで機能します。何か提案はありますか?
aderchox

139

ソースレベルのデバッグ情報を生成する追加のパラメーター-gを追加する必要があります。次のようになります。

gcc -g prog.c

その後、一般的な方法でgdbを使用できます。


25
私の場合、この答えは私にとって問題を解決しましたが、受け入れられた答えは違いがありませんでした。
フランクスター2014

8

私は同じ問題を抱えており、私はこの投稿をフォローしました、それは私の問題を解決しました。

次の2つの手順に従います。

  1. 最適化レベルが -O0
  2. -ggdbプログラムをコンパイルするときにフラグを追加する

幸運を!


0

gccコンパイルマシンとgdb テストマシンのバージョン異なる場合は常に、debuginfo形式の非互換性に直面している可能性があります

これを修正するには、debuginfo形式をダウングレードしてください。

gcc -gdwarf-3 ...
gcc -gdwarf-2 ...
gcc -gstabs ...
gcc -gstabs+ ...
gcc -gcoff ...
gcc -gxcoff ...
gcc -gxcoff+ ...

またはgdbgcc使用していると一致します。


0

私が今朝この問題に出会ったのは、別のOSで同じ実行可能ファイルを使用したためですgcc -ggdb -Wall test.c -o test。Mac(10.15.2)でプログラムをコンパイルした後gdb、VirtualBoxのUbuntu(16.04)で実行可能ファイルを実行しました。

修正:Ubuntuで同じコマンドを使用して再コンパイルすると、問題ないはずです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.