GNU/Linux で gcc を使用しており、libc と libstd++ のデバッグ ファイルとヘッダーがインストールされています。しかし、特にlibstd ++にデバッグするために、gdbにそれらのソースコードを使用するように指示する方法がわかりません。libstdc++ 自体のソースコードは複雑な構造で提供されているようです。directoryコマンドは正しい選択だと思います。ここでは Debian/Ubuntu を使用しており、apt-get source libstdc++6を使用してソースをホーム ディレクトリにダウンロードしました。
Fedora (数年前) では、このために特別な手順を実行する必要はなかったと確信しています。おそらく、Fedora はこのために特別な方法で準備されたのでしょう。そのため、すべてのディストリビューションに適合する一般的な手順について喜んでいます。
ありがとうございました
に加えてコンパイル
する必要があることがわかったので、コンパイルコマンドは.-D_GLIBCXX_DEBUG
-g
$ g++ -o test test.cpp -g -D_GLIBCXX_DEBUG
さらに、プリティ プリンターが見つからないという警告が表示されました。ここで説明するように解決しました 。
libstdc++ にデバッグできるようになりましたが、常に次のメッセージが表示されます。
Breakpoint 1, main () at test.cpp:9
9 string str = "str";
(gdb) s
std::allocator<char>::allocator (this=0x7fffffffe1e0)
at /build/buildd/gcc-4.7-4.7.2/build/x86_64-linux-gnu/libstdc++-v3/include/bits/allocator.h:104
104 /build/buildd/gcc-4.7-4.7.2/build/x86_64-linux-gnu/libstdc++-v3/include/bits/allocator.h: No such file or directory.
(gdb) s
std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string (
this=0x7fffffffe1c0, __s=0x402930 "str", __a=...)
at /usr/include/c++/4.7/bits/basic_string.tcc:217
217 __s + npos, __a), __a)
gdb のディレクトリをダウンロードしたソースに設定する必要はありません(ホーム ディレクトリを検索すると思います)。したがって、これを修正するには別のコマンドが必要だと考え、「代替パスの設定」を見つけて/home/username/gcc-4.7-4.7.2/gcc-4.7.2/libstdc++-v3を指していましたが、そうではありません仕事。gdb がallocator.hを完全に間違った場所で探すのはなぜですか?