問題タブ [dwarf]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - dSYM アドレス検索
iOS アプリの dSYM ファイルからアドレス、ファイル名、および行番号を解析しました。私は基本的に、アドレスをファイル名と行番号にマップするテーブルを持っています。これはデバッグに非常に役立ちます。
を取得するactual lookup address
には、クラッシュ レポートのスタック トレース アドレスを使用し、https ://stackoverflow.com/a/13576028/2758234 の回答で指定されている式を使用します。だから、このようなもの。
私はそのアドレスを使用して、自分のテーブルで調べます。取得したファイル名は正しいですが、行番号は常に、スタック トレースで次の関数を呼び出した実際の行ではなく、呼び出された関数またはメソッドの最後を指しています。
どこかで読んだのですが、フレーム アドレスはシステム ポインター サイズの 2 倍に調整されているため、タグを解除する必要があることを覚えていません。したがって、32 ビット システムの場合、ポインターのサイズは 4 バイトであるため、次のような式を使用して 8 バイトを使用してタグを解除します。
はuintptr_t
、Objective-C でポインターに使用されるデータ型です。
これを行った後、ルックアップは機能しますが、タグが解除されたアドレス以下である最も近いアドレスを見つけるなどのことをしなければなりません。
質問 #1 :
スタック フレーム アドレスのタグを解除する必要があるのはなぜですか? スタック トレースで、アドレスがまだ正しい場所を指していないのはなぜですか?
質問 #2 :
クラッシュ レポートに、フレームが欠落しているように見えることがあります。たとえば、which がwhich を呼び出すとfunction1()
、スタック トレースに次のように表示されます。function2()
function3()
function4()
また、(フレーム 2、上記) のスタック トレース アドレスfunction3()
は、タグを外した後でも、正しい行番号を指していません (ただし、正しいファイルです)。これは、Xcode にクラッシュ レポートをシンボリックさせた場合でも見られます。
なぜこれが起こるのですか?
debugging - DWARF シンボルの ELF セクションを見つけるにはどうすればよいですか?
DWARF デバッグ情報を含む ELF ファイルがあります。DWARF シンボル (関数 foo() など) が与えられた場合、それが存在する ELF セクションを見つけたいと思います。ファイルにはオーバーレイ セクションがあり、同じマップを持つ複数のセクションがあるため、各セクションの範囲に対して PC 一致を行うことはできません。アドレス範囲。つまり、シンボルがオーバーレイ セクションの 1 つにある場合、そのアドレスはすべてのオーバーレイ セクションのアドレス範囲で一致します。
助けてくれてありがとう。
gcc - dwarf形式のデバッグ情報のDW_AT_nameを変更
gcc を使用して u-boot をコンパイルしています。ドワーフ情報が生成されます。
...
<74cb> DW_AT_name : (間接文字列、オフセット: 0x1a6a): board.c
<74cf> DW_AT_comp_dir : (間接文字列、オフセット: 0x2689): /root/file/u-boot/u-boot-am33x/arch/arm/lib
...
DW_AT_name を「board.c」から「/root/file/u-boot/u-boot-am33x/arch/arm/lib/board.c」に変更するには、どのオプションを追加する必要がありますか? これは、DW_AT_name にソース ファイルのフル パスが含まれていることを意味しますか?
c - gcc 4.8.2 で DW_AT_high_pc の DWARF 情報が間違っているようです
DWARF の初心者として、このページ(コードはこちら) に示されているコードを試しましたが、起動すると次のようになります。
デバッグ セッションの後、問題は 78 行目から発生しているように見えます。
問題は、form
of attrs[i]
showsattrs[i]
がアドレスではないことです (1 ではなく 7 に設定されています)。それを使って探索tracedprog
するobjdump
と、関数が得られdo_stuff
ます:
この出力では、DW_AT_high_pc
長さが 2 オクテットしかないため、私には正しくないようです。
参考までに、私は次のようにコンパイルtracedprog
しました。
gcc
別のマシンでは問題がないため、編集は問題のようです。を使用してgcc 4.8.2
います。
c++ - ライブラリが SJLJ または DWARF2 コンパイラによってコンパイルされているかどうかを調べる
ライブラリ アーカイブが SJLJ または DWARF2 例外処理コンパイラを使用して構築されているかどうかを確認する方法はありますか? ライブラリは 32 MinGW を使用してコンパイルされます。
gcc - 代入の左側の変数を右側の関数呼び出しの戻り値に一致させます
function 内の次のステートメントfunc()
では、malloc されたメモリ領域を指す変数名 (この例では「辞書」) を見つけようとしています。
インストルメントmalloc()
化されたものは、割り当ての開始アドレスとサイズを記録できます。ただし、割り当てられる変数「辞書」の知識はありません。コンパイラ側の機能は、コンパイラを変更してそのような割り当てステートメントをインストルメント化することなく、この問題を解決するのに役立ちますか?
私が考えている 1 つの方法は、変数 'dictionary' と関数 'malloc' が 1 つのソース コード行または隣り合っているという機能を使用することです。dwarf は行情報を提供します。
ios - .dSYM ファイルを明示的な DWARF 形式にデコードする方法は?
DWARF はデバッグ情報形式です。Xcode によって生成された .dSYM ファイルには、DWARF デバッグ情報が含まれています。
問題は、.dSYM ファイルをデコードして人間が読める DWARF 情報を取得する方法です。これは以下のようになります。
debugging - obj ファイルを作成するための GNU C コンパイルについて
objdump 分析で見た DWARF の完全な形式とは、DWARF デバッグ情報の形式を学習することです。簡単なプログラムを解析してみた
これが .o ファイルのように命令でどのようになるかを分析したかったのですか? 誰でも助けてください。
私も自分のプログラムを (objdump -d file.o) でマップしたかったのですが、