2017-04-13 15 views
0

もちろん、C/C++プログラムで定義された各変数のシンボルとタイプの情報が利用できます。そうでなければ、デバッガはそれらを表示できませんでした。しかし、この情報へのアクセス方法は?スタック上のローカル変数のGCCシンボルテーブル

エルフについて多くの情報が利用可能ですが、それは、リモートリアルタイムシステム(ないUNIXの下)で、すなわちスタック

にのみ、グローバル変数、ローカルでないものを保持するように見えるリンクについてです、I今すぐ覗くことができるようになり、関連する変数名と一緒にリスト内のいくつかのメモリをコピーし、その後、RTシステムが稼動している間にそれらを見てください。

ダンプは、コード内にいくつかのステートメントを追加する必要なく、任意の変数にいつでも導入できます。

+0

これは、関数やスタック上でローカルに定義された構造体型の値を出力するサンプルプログラムを持っているだけで、フィールドが拡張されているなど、多くの役に立ちます。 –

答えて

1

この情報へのアクセス方法は?

TL; DR:複雑です。

ほぼ完全なデバッガをビルドする必要があります。あなたはthis spaceを見ることができます。作者がステップ9に近づくと、それに従う例があります。

私は現在、次に、関連する変数名と共にリスト内のいくつかのメモリをコピーし、後でRTシステムの実行中にそれらを見てみたいと思っています。

RTシステムでは通常、簡単にデバッグすることはできません。スタックの全体(使用されている部分)のスナップショットを取って、後で変数値を「取り出す(fish out)」ことが、おそらく可能な限り最高です。

これを行うには、スタックポインタと命令ポインタの現在の値、スタックの内容、およびすべてのELFオブジェクトのロードアドレスを知る必要があります。また、デバッガの大部分を再実装(または既存のものを修正)する必要があります。

最も簡単な方法は、上記の情報をELF coreに変換(後処理)し、既存のデバッガを使用して値を分析することです。 Google user-space coredumperを使用して、何が関係しているのかを確認できます。 this answerも参照してください。

関連する問題