9

プロジェクトを clang++ でコンパイルすると、ソース ファイルへのパスがオブジェクト コードに含まれていないようです。これは、gdb がコードを表示するソース ファイルを見つけることができないことを意味します。特定のインスタンスについては、gdb のdirectoryコマンドを使用してディレクトリを追加できますが、私のプロジェクトには多くのソース ディレクトリがあり、すぐに面倒になります。

g++ を使用するように構成を切り替えると、gdb は単純にすべてのソース ファイルを検索します。

この機能は Snow Leopard の clang++ 2.9 では機能しましたが、Lion の clang++ 3.1 では機能しません。私は XCode 4.3.2 を持っています。

オブジェクトファイルでフルパスの使用を強制するclangオプションはありますか? 構成に何か問題がある可能性がありますか?

4

1 に答える 1

4

私はこれを発見しました:階層的なメイクファイルでプロジェクトを構築するときに問題が発生します。サブディレクトリが親ディレクトリから構築されている場合 (私の makefile: 内make -w -C sub-dir)、gdb はソース ファイルを開くことができません。サブディレクトリに変更し、このディレクトリに対してのみ make を呼び出すと、gdb はソースを見つけます。これは、生成されたオブジェクト ファイルでビルド パスを検索することで確認できます。使用しstrings object-file | grep $HOMEました。

また、これは 1 つのオブジェクト ファイルでは発生しないことに気付きました。このファイルは CC でコンパイルされていません。このファイルは esql でコンパイルされています。最後に、esql は CC を呼び出します。

そのため、この回避策を試しました。make から直接 clang を呼び出さないでください。シェル スクリプトから clang を呼び出します。

$ cat ~/bin/mycc

/usr/bin/cc "$@"

$ export CC=mycc
$ make 

万歳!gdb はソース ファイルを開きます。

ところで:別の回避策として置き換えることです make -w -C sub-dir(cd sub-dir;make -w)

于 2012-08-29T06:19:46.333 に答える