2011-10-20 6 views
1

私は、ソースファイルがインストールされているオープンソースのサードパーティ製ライブラリ(例えば、/opt/3RD_PARTY_LIBRARY/src/)を持っています。このライブラリを使用して私のプログラムをデバッグし、/opt/3RD_PARTY_LIBRARY/src/a.cppで定義された関数に入ると、gdbはその関数が通常の/opt/3RD_PARTY_LIBRARY/src/a.cppの代わりに/tmp/build/3RD_PARTY_LIBRARY-VERSION.x.x/opt/3RD_PARTY_LIBRARY/src/a.cppというファイル内で実行されていることを示します。gdbを使用して3番目のライブラリをデバッグする際の質問

これはどのように起こるか説明できますか?これはgdbやサードパーティのライブラリによって引き起こされますか?

答えて

0

コンパイル時に、GCCはカレントディレクトリと(通常は相対)ファイル名を記録し、これをオブジェクトファイルのデバッグ情報に入れます。

デバッグ時に、GDBは2つを連結してソースを探します。

上記の症状から、サードパーティのライブラリは/tmp/build/3RD_PARTY_LIBRARY-VERSION.x.x/opt/3RD_PARTY_LIBRARY/srcディレクトリに作成されています(通常とは異なることです)。

この問題を回避するには、directoryコマンドを使用してソースが現在どこにあるのかをGDBに伝えるのが最も簡単な解決策です。これはdirectory /opt/3RD_PARTY_LIBRARY/srcです。

また、これは同様に動作するはずです:

mkdir -p /tmp/build/3RD_PARTY_LIBRARY-VERSION.x.x/opt/3RD_PARTY_LIBRARY 
ln -s /opt/3RD_PARTY_LIBRARY/src /tmp/build/3RD_PARTY_LIBRARY-VERSION.x.x/opt/3RD_PARTY_LIBRARY 
関連する問題