Linux でバイナリを起動することによって引き起こされるセグメンテーション エラーをデバッグする方法は? バイナリのソース コードはありません。
セグメント フォールトの原因となったバイナリによって行われたシステム コールを知る方法。役立つデバッグユーティリティはありますか?
提案されていることに加えて、次のこともできます。
実行ulimit -c unlimited
してコア ダンプを有効にしてから、アプリを実行します。
セグメンテーション違反の時点で、コア ダンプを実行する必要があります。
次にgdb your_app core
、 gdb run 内で実行できますbacktrace
。おそらく、デバッグ シンボルを使用してコンパイルされているため、実際にはかなりの情報が得られます。
あなた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 の初期化が完了しました