小売ビルドでのコアダンプの解析では、特定のモジュールとソースのobjdump
を関連付ける必要があることがよくあります。通常、アセンブリダンプをソースと関連付けることは、その関数がかなり複雑であれば苦痛になります。 今日、アセンブリーや相関関係のあるインターリービングソースがあると予想して、特定のモジュール(コンパイルオプション-S
)のassembly listing
を作成しようとしました。残念ながらリストはので、私は私が アセンブリとソースの関連付けC++プログラムのリスト
objdump
を決定することができ、そこからコアダンプを考えると
- を思っていた相関するのに十分な友好的ではなかったです
-S
オプション。
ソースと1対1の対応は可能ですか?
私は
.LBE7923:
.loc 2 4863 0
movq %rdi, %r14
movl %esi, %r12d
movl 696(%rsp), %r15d
movq 704(%rsp), %rbp
.LBB7924:
.loc 2 4880 0
testq %rdx, %rdx
je .L2680
.LVL2123:
testl %ecx, %ecx
jle .L2680
movslq %ecx,%rax
.loc 2 4882 0
testl %r15d, %r15d
.loc 2 4880 0
leaq (%rax,%rax,4), %rax
leaq -40(%rdx,%rax,8), %rdx
movq %rdx, 64(%rsp)
としてアセンブリリストを参照してくださいが、答えは通読、図示のように.LVL2123
と.loc 2 4863 0
注 のようなディレクティブのようなラベルを解釈する方法を理解することができなかった例として、アセンブリソースと、シンボルに基づくパターン(関数呼び出し、分岐、return文など)を直観的に判断することは、私が一般的に行うことです。私はそれが機能しないことを否定していませんが、関数がかなり関与している場合、アセンブリリストのページは苦労していますが、関数がインライン展開されているかオプティマイザが単に投げられているためコードはそれを喜ばせました。どのくらい効率的に最適化されたバイナリを処理するのか、Windows WinDBGでは最適化されたバイナリをどのように扱うことができるのか、私には分かりません。ですから、私はコンパイラの出力から始めて、それを相関させるために使用します。私のコンパイラがバイナリのマングリングを担当しているのであれば、ソースとどのように関連づけるべきかは言うまでもないが、残念ながらそれは最も役に立たず、.loc
は本当に誤解を招く。 残念ながら、いろいろなプラットフォームで再生できないダンプを読まなければならないことがよくあります.WindDB Mini-dumpsをデバッグしていて、Linux Coredumpsのデバッグにかなりの時間を費やしています。私はそれが正しいことをしていないかもしれないが、私はこの質問を思いついた。
これはあなたの質問に対する回答ではありませんが、とにかく便利かもしれません:http://msdn.microsoft.com/en-us/library/aa238730%28v=vs.60%29.aspx –
コアダンプにはその中のアドレス。ですから 'addr2line'プログラムをソースの場所に翻訳してみてください。これはもちろん、デバッグシンボル付きの実行可能ファイルが必要です(配布されたバージョンが削除されても動作しますが、取り除かれていないバージョンと比較するだけです) –
@ edA-qamort-ora-y:これを試して、私は終わります。ところで、これはコメントではなく答えでしょうか? – Abhijit