MIPsコアで実行されている組み込みバージョンのLinuxカーネルがあります。私たちが書いたプログラムは、特定のテストスイートを実行します。ストレステストの1つ(約12時間の実行中)では、segフォルトが発生します。これにより、コアダンプが生成されます。CプログラムでLinuxがクラッシュしたときのデバッグの改善
残念ながら、コアダンプはそれほど有用ではありません。クラッシュは、動的にリンクされているシステムライブラリ(おそらくpthreadまたはglibc)にあります。それだけでクラッシュポイントを示し、他の発信者がいるため、コアダンプでのバックトレースは有用ではありません(私達のユーザー空間のアプリは-g -O0で構築されていないが、まだバックトレース情報なし):
Cannot access memory at address 0x2aab1004
(gdb) bt
#0 0x2ab05d18 in ??()
warning: GDB can't find the start of the function at 0x2ab05d18.
GDB is unable to find the start of the function at 0x2ab05d18
and thus can't determine the size of that function's stack frame.
This means that GDB may be unable to access that stack frame, or
the frames below it.
This problem is most likely caused by an invalid program counter or
stack pointer.
However, if you think GDB should simply search farther back
from 0x2ab05d18 for code which looks like the beginning of a
function, you can increase the range of the search using the `set
heuristic-fence-post' command.
もう一つの不幸をつまり、gdb/gdbserverを実行できないということです。 gdb/gdbserverは__nptl_create_eventを壊し続けます。テストでスレッド、タイマー、破棄が作成されるのを確認すると、5秒ごとに長時間座ることはほとんど不可能です。
EDIT: 私たちのツールチェーンでは、backtraceとbacktrace_symbolsはサポートされていません。したがって
:
などワンセグ障害とより多くのバックトレースデータを生成し、スタックポインタ、コールスタックを、トラップの方法はありますか?
.soファイルでクラッシュしたコアダンプからさらにデータを取得する方法はありますか?
ありがとう。
もし可能なら、 'SIGSEGV'を扱うことができますか?それは決して推奨されませんが、私はこの状況であなたを助けることができると感じています。 – Stark07