2016-10-08 11 views
1

私の質問に答えるためにDWARF DIフォーマットのための良い文書を見つけることができないようです。私はC言語にコンパイルする言語を書いていますが、DWARFデバッグ情報をCコードに生成する方法はありますか、それともアセンブリのみですか?生成されたCコードを持つDWARF DI?

は、それが原始的#lineなどの良くないものと#fileディレクティブを使用以外の(生成)Cコードにデバッグ情報を追加するために不可能ですか?

答えて

0

私は、生成されたCをデバッグ情報(-g)でコンパイルすると思いますので、あなたの高水準言語を記述する追加のDWARFレコードをどうやって作成するかということです。考えられるアプローチ:

(1)オブジェクトファイルを編集して、CコードのDWARFレコードを増やします。私はおそらくlibdwarfまたはpyelftoolsで実行可能な既存のツールを知りません。

(2)追加のDWARFレコードをコンパイラを介して「密輸」する方法を見つける。 #pragmaでリンカコマンドを与えることができます。しかし私はこれをサポートするコンパイラについては知らない。

(3)LLVMは、IR representationのデバッグレコードをサポートしています。 clangを使用して生成されたCをIR(01​​)にコンパイルし、次にfoo.llを増やし、.o(llc foo.ll)を生成してリンクする準備ができました。

3番目のオプションが最も簡単なようです。

+0

アイデアありがとうございます。私は第3のオプションに行くかもしれない! –

2

コンパイラがアセンブリを生成できると仮定すると、いくつかのことが可能です。この例については、my favorite gdb test caseを参照してください。

通常これは行われません。正しいことを得るのはかなり難しいかもしれません。今日では、コンパイラをGCCまたはLLVMへの直接のフロントエンドにする方が良いでしょう。生成されたCコードのデバッグをより簡単にするためにgdbまたはlldbヘルパースクリプトを記述することができます。

+0

"これは正しいことが非常に難しいかもしれません.DWARFデータを使った作業に対して正規化された難易度でさえもそうです。 –

+0

ええ、それは実用的な解決策ではなく、もっと楽しいトリックのようです。 –

関連する問題