gdb
静的ライブラリに対してコンパイルされたプログラムをデバッグするために使用しています。ライブラリとプログラムの両方が、デバッグ シンボルを使用してコンパイルされました。このライブラリでgdb
は、ファイルに実装されたソース コードのみが表示され、.h
ファイルに実装されたソース コードは表示されません.cpp
。なぜだろう?
例えば
(gdb) info sources
そのライブラリのヘッダー ファイルのみを一覧表示し、ファイルは一覧表示しません
.cpp
。ファイルに実装された関数にブレークポイントを設定でき
.cpp
ます。たとえば、次のgdb
コマンドを理解します。(gdb) break orgQhull::Qhull::runQhull,
ただし、その関数の本体内のコードをデバッグすることはできません。(コマンドを使用して、アセンブラー レベルで個々の命令をステップ実行することのみ可能
stepi
です。) 一方、デバッガーは、ヘッダー ファイルに実装された関数のコードを見ることができます。このコマンドは、前述の関数
backtrace
に対して「使用できるシンボル テーブルがありません」と報告します。runQhull
(gdb) backtrace full #0 0x00000000004d361a in orgQhull::Qhull::runQhull(orgQhull::RboxPoints const&, char const*) () No symbol table info available. #1 0x000000000049573a in ConvexHull::ConvexHull (this=0x7fffffffcb70, tree=..., begin=..., end=...) at /home/filip/fel/dp/sandbox/src/populating_octomap/include/ConvexHull.h:40
この理由は何でしょうか?どんな提案も大歓迎です!
いくつかの詳細:
- 問題のライブラリは Qhull の
libqhullcpp.a
もので、ソースはgit://gitorious.org/qhull/qhull.git
- システム: GNU/Linux 3.2.0-40-generic を使用する Ubuntu 12.04.2 LTS #64-Ubuntu SMP x86_64
- gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
- GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1) 7.4-2012.04