Raspbianでgdbを使用してプログラムをデバッグしようとしましたが、取得できるのは次のとおりです。
Program received signal SIGILL, Illegal instruction.
0xb6fe8acc in ?? () from /lib/ld-linux-armhf.so.3
SIGILL
ハンドルをnostop
(handle SIGILL nostop
)に設定しても役に立ちません:
Program received signal SIGILL, Illegal instruction.
Program terminated with signal SIGILL, Illegal instruction.
The program no longer exists.
私が得るすべてのバックトレースは:
#0 0xb6fe8acc in ?? () from /lib/ld-linux-armhf.so.3
#1 0x00000000 in ?? ()
gdbの外部でプログラムを起動すると、通常のC ++例外(デバッグしたい)が発生します。
すべてのソフトウェアは、raspbianリポジトリから最新バージョンに更新されました。さらに、ラズベリーpiファウンデーションカーネル「3.18.9+」とラズベインカーネル「3.18.0-trunk-rpi」も試してみました(カスタムカーネルモジュールが必要です)。メインマシンで同じプログラムを問題なくデバッグできます。
更新:デバッグはカーネル「3.12-1-rpi」で期待どおりに機能します。
このエラーの原因は何ですか?
@mpromonet
—
someonr 2015年
pass
はデフォルトで設定されているため、違いはありません。違いはありません。と同じ結果handle SIGILL nostop
そして、意味のあるバックトレース(
—
ゴルディロックス
bt
)はありませんか?「このエラーの原因は何ですか?」リンカー/ローダー(ld-linux-armhf
)の不正な命令のみに基づいています。
意味のあるバックトレースを取得できませんでした(編集された質問を参照)。小さな例を作ってみます。また、gdbがないと不正なオペコードを取得できないので混乱しています。
—
someonr 2015年
スタックが破壊されたようです、valgrindが役立ちますか?
—
mpromonet 2015年
handle SIGILL pass nostop
か?