問題タブ [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.
c - ドワーフ情報から構造体メンバーのオフセットを取得するには?
ドワーフ情報から DW_AT_data_member_location 属性値を出力しようとしていますget the member variables offset from a struct name
が、ヘルパー関数が機能していないようです。
からの dwarf_info は次のとおりですobjdump
。
属性コードは取得できますが、属性値は取得できません:
この変数の型は何ですか? その値を取得する方法は? ここでどのヘルパー関数が機能しますか?
c++ - objdump が ostream クラスのサイズを表示しない
私はこのコードを持っています:
コンパイルしますg++ -g main.cpp
(私のOSでは272が出力されます)
その後、objdump --dwarf=info a.out
次のデバッグ情報エントリ (ダイ) を実行して確認しますostream
。
実際ostream
には、 Die の typedef にbasic_ostream<char, std::char_traits<char>>
サイズ ( ) の属性が含まれていないだけで、そのDW_AT_byte_size
理由がわかりません。実行可能ファイルには ostream クラスの他のダイはありませんが、コンパイラはそのクラスのサイズを知っている必要があります (サイズは で出力されますsizeof
)。だから私の質問はostream
、ドワーフ情報からクラスの適切なサイズを取得するにはどうすればよいですかobjdump
?
c++ - gdb を使用して、yasm を使用してアセンブルされたコードをデバッグするにはどうすればよいですか?
yasm を使用してコードをアセンブルし、C++ プログラムにリンクしていますが、gdb でアセンブリ言語ファイルのシンボルにブレークポイントを設定できません。
コマンドラインはおそらくそれほど明るくはありませんが、ここに行きます:
すべて問題なくビルドされ、プログラムが実行されます。しかし、それを gdb にロードしてデバッグしようとすると、yasm ファイル内のどの関数にもブレークポイントを設定できないようです。たとえば、MandelRect という関数があります。メインのどこかから呼び出された場所を示すgdbは次のとおりです。
そのアドレスが何であるかを示すgdbは次のとおりです。
これは、ブレークポイントを設定できない gdb です。
そして、正しいアドレスにブレークポイントを配置すると、実行が関数に到達したときに、命令ごとにステップ実行できなくなります。私が知る限り、それはレーベルからレーベルへと流れています。
明らかに - まあ、多分?- これは、ファイルがデバッグなしでコンパイルされたという gdb の主張と関係があります。しかし、関連する .o ファイルとバイナリにシンボルがあるようです:
では、どうすればこれを修正できますか?私は何かを誤解していますか、それともyasm -g
壊れていますか? yasm のデバッグ情報を gdb で動作させることができた人はいますか?
(システムはLinux 3.2.0-4-amd64 #1 SMP Debian 3.2.60-1+deb7u3 x86_64 GNU/Linux
です。)
compiler-construction - DWARF でライブ範囲をエンコードする
DWARF で変数のライブ範囲をエンコードしたい。どうすればいいですか?DWARF 3 pdf の 178 ページの仕様で、DW_AT_high_pc と low_pc は TAG_variable でタグ付けされた DIE には適用されないことがわかります。仕様に従ってどこにエンコードすればよいですか?