1

ARM926EJ-S rev 5 (v5l) で実行される C プログラムをデバッグしようとしています。ソフトウェアは、std とクロスコンパイルされました(静的にリンクされています)。arm-linux-gnueabi コンパイラ (シナプス経由でインストール)。Ubuntu 13.04 64bitを実行しています。デバイスにはBusybox v1.18.2があります。gdbserver ( host=arm-linux-gnueabi を使用) と gdb ( target=arm-linux-gnueabi を使用) を正常にコンパイルし、ローカルで実行されている gdb を介して組み込みデバイスでプログラムを開始できます...私の問題は、適切なバックトレース出力がありません。

gdb のメッセージ:

Remote debugging using 192.168.21.127:2345
0x0000a79c in ?? ()
(gdb) run
The "remote" target does not support "run".  Try "help target" or "continue".
(gdb) continue
Continuing.
Cannot access memory at address 0x0
Program received signal SIGINT, Interrupt.
0x00026628 in ?? ()
(gdb) backtrace
#0  0x00026628 in ?? ()
#1  0x00036204 in ?? ()
#2  0x00036204 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
(gdb)

-g、-g3 -gdwarf-2、-ggdb、-ggdb3を使用してソフトウェアをコンパイルしようとしましたが、違いはありませんでした。

ここで何が欠けているのか、誰にも分かりますか?

これはおそらく BusyBox の問題ですか、それともホスト システムに追加のライブラリが必要ですか?

また、ほぼ同じ出力でexecinfo.hから関数backtrace_symbolsを試しました...

返信ありがとうございます。

4

1 に答える 1

0

デバッグの別の方法は、以下の手順に従ってボード内で gdb を使用することです。

1)Run gdb process and attach your process to gdb using attach <pid> command
2)Continue your process using c command in gdb

SIGINT または SIGSEGV を見つけるたびに、gdb で bt コマンドを使用してプロセスのスタックを参照します。

于 2014-01-13T13:39:38.530 に答える