3

backtrace[3]で示されている例のように、プログラムのスタックトレースをダンプしたいのですが、代わりに以下の結果が得られました。

私はlinux 2.6arm-linux-gcc 4.3.2を使用しています。

ランニング:
arm-linux-gcc prog.c -o prog -rdynamic

結果は次のとおりです。

backtrace() は 1 つのアドレスを返しました

/lib/ld-linux.so.3 [0x40025000]

この問題を解決するのを手伝ってくれませんか?

ありがとう


gcc では問題ありませんが、arm-linux-gcc ではトレースを取得できません。

4

1 に答える 1

1

GCC ARM オプションのドキュメント によると、ARM プラットフォームでスタック フレームを生成するには、 -mapcs-frameオプションを GCCに渡す必要があります。

-mapcs-frame
コードを正しく実行するために厳密に必要ではない場合でも、すべての関数に対して ARM プロシージャ コール標準に準拠するスタック フレームを生成します。このオプションで-fomit-frame-pointerを指定すると、リーフ関数のスタック フレームが生成されなくなります。デフォルトは-mno-apcs-frameです。

これは、 gcc C++ アプリがクラッシュしたときにスタックトレースを生成する方法に対する Linux 固有の回答へのコメントで指摘されました。これも役立つ場合があります。

于 2013-03-05T15:40:29.380 に答える