1

Linux でバイナリを起動することによって引き起こされるセグメンテーション エラーをデバッグする方法は? バイナリのソース コードはありません。

セグメント フォールトの原因となったバイナリによって行われたシステム コールを知る方法。役立つデバッグユーティリティはありますか?

4

2 に答える 2

6

提案されていることに加えて、次のこともできます。

実行ulimit -c unlimitedしてコア ダンプを有効にしてから、アプリを実行します。

セグメンテーション違反の時点で、コア ダンプを実行する必要があります。

次にgdb your_app core、 gdb run 内で実行できますbacktrace。おそらく、デバッグ シンボルを使用してコンパイルされているため、実際にはかなりの情報が得られます。

于 2013-07-05T07:42:01.110 に答える
6

あなたstrace your-programを助けますか?プログラムによって呼び出されたすべてのシステム コールのリストを出力します。

サンプル出力

% strace true

.

    2 2 [メイン] 真 (2064) ********************************************* *****
   83 85 [main] true (2064) プログラム名: C:\cygwin\bin\true.exe (windows pid 2064)
   44 129 [メイン] true (2064) OS バージョン: Windows NT-6.1
   36 165 [メイン] 真 (2064) ********************************************* *****
  145 310 [メイン] true (2064) sigprocmask: 0 = sigprocmask (0, 0x6123D468, 0x610FBA10)
  183 493 [メイン] true 2064 open_shared: name shared.5、n 5、共有 0x60FF0000 (0x60FF0000 が必要)、h 0x70、*m 6
   27 520 [メイン] true 2064 heap_init: ヒープ ベース 0x20000000、ヒープ トップ 0x20000000、ヒープ サイズ 0x18000000 (402653184)
   30 550 [メイン] true 2064 open_shared: 名前 foo、n 1、共有 0x60FE0000 (0x60FE0000 が必要)、h 0x68、*m 6
   18 568 [main] true 2064 user_info::create: 0x60FE0000 で「foo」用に共有されたユーザーを開く
   17 585 [main] true 2064 user_info::create: ユーザー共有バージョン 6467403B
   36 621 [メイン] true 2064 fhandler_pipe::create: 名前 \\.\dir\cygwin-c5e39b7a9d22bafb-2064-sigwait、サイズ 164、モード PIPE_TYPE_MESSAGE
   51 672 [メイン] true 2064 fhandler_pipe::create: パイプ読み取りハンドル 0x84
   16 688 [main] true 2064 fhandler_pipe::create: CreateFile: name \\.\dir\cygwin-c5e39b7a9d22bafb-2064-sigwait
   35 723 [メイン] true 2064 fhandler_pipe::create: パイプ書き込みハンドル 0x88
   23 746 [main] true 2064 dll_crt0_0: dll_crt0_0 の初期化が完了しました


于 2013-07-05T07:37:15.787 に答える