コアダンプを生成するコマンド全体を復元します。

コアダンプを生成するコマンド全体を復元します。

作業中のプログラムがクラッシュし、コアダンプを生成します。問題は、呼び出されるパラメータに関連していると思います。そのうちのいくつかは他の(やや複雑な)プログラムによって自動的に生成されます。だからgdbデバッグfile core.MyApplication.1234をしたり。

しかし、コマンドは非常に冗長で、出力は次のようになります。

core.MyApplication.1234: ELF 64-bit LSB core file x86-64, version 1 (SYSV), SVR4-style, from './MyApplication -view -mwip localhost -mwnp 12345 -mwlp 12346 -mwti 12347 -Debu'

(この例の名前を変更しましたが、理解できます。)

この後にはさらにパラメータがあることがわかりますが、コアファイルではコマンドは常に80文字に切り捨てられます。両方をgdb報告fileしてください。出力を見ると、objdump「-Debu」以降も切り捨てられたように見え、残りの部分がコアダンプに書き込まれたかどうかはわかりません。

RHEL6で実行中です。私が見つけたこのスレッドは2007年のものです。Solarisシステムを使用するソリューションについて説明していますが、pargsこれは私のシステムでは有効なコマンドではなく、Red Hatの「同等の」コマンドはコアファイルではなく実行中のプロセスでのみ機能することに気付きました。

プログラムの実行に使用された完全なコマンドをどのように復元できますか?可能ですか?

ベストアンサー1

データがあります(少なくとも999項目、合計6885バイト以上の数字)。

> cat segfault.c 
int main(int argc, char *argv[])
{
    char *s = "hello world";
    *s = 'H';
}
> cc -g -o segfault segfault.c
> limit coredumpsize 9999999
> ./segfault `perl -le 'print "blah$_" for 1..999'`
Segmentation fault (core dumped)
> strings core.12231 | grep -c blah
1000

その後、高速altagoobingleduckgoingを使用しgdbてデバッグシンボルを想定すると、次のように復元できます。

> gdb ./segfault core.12231
...
(gdb) p argc
$1 = 1000
(gdb) x/1000s *argv
...

"$@"別のオプションは、どこかに記録し、与えられた引数execで正しいプログラムを記録する単純なシェルラッパーを使用することです。

おすすめ記事