3

この投稿に従って、スタックトレースを印刷しました。gccC++アプリがクラッシュしたときにスタックトレースを生成する方法。x86Linuxでうまく機能します。誰かがarm-linuxで動作させる方法を教えてもらえますか?

私はarm-linux-gcc4.4.3を使用しています。

[root@FriendlyARM /]# ./test1
Error: signal 11:
[0x0]

x86で

mickey@mickeyvm:~/Desktop/workspace/test/testCatchSeg/src$ ./test1
Error: signal 11:
./test1(_Z7handleri+0x19)[0x804876d]
[0xedd400]
./test1(_Z3bazv+0x10)[0x80487c2]
./test1(_Z3barv+0xb)[0x80487e1]
./test1(_Z3foov+0xb)[0x80487ee]
./test1(main+0x22)[0x8048812]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xe7)[0x84de37]
./test1[0x80486c1]

これが私がarm-linux用にコンパイルする方法です

 arm-linux-g++ -g -rdynamic ./testCatchSeg.cpp -o testCatchSeg
4

2 に答える 2

5

ARMは、サブルーチンに分岐するときにリターンアドレスをスタックに格納しませんが、サブルーチンを呼び出す関数が他の関数を呼び出す前にリンクレジスタを独自のスタックフレームに保存することを期待しているため、デバッグ情報なしでスタックフレームを追跡することはできません。

于 2012-06-04T12:13:16.983 に答える
4

backtrace() を GCC for ARM で使用できるようにしました。私にとっての鍵は、-funwind-tables でコンパイルすることでした。それ以外の場合、スタックの深さは常に 1 (つまり、空) でした。

于 2013-04-10T20:18:18.617 に答える