3

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
4

1 に答える 1