2017-03-27 24 views
0

9時間後に(おそらく間欠的な)セグメンテーションフォールトを持つ長時間実行しているプログラムがあり、スタックトレースがあります。私は、セグメンテーションフォルトが発生したソースラインを探したいと思います。スタックトレースから共有ライブラリのソース行を見つける

segfaultは、ctypesを使用してPythonから呼び出された(OpenMPを使用する)C++モジュールで発生しました。 C++モジュールはlinux上でデバッグシンボルでコンパイルされました。 Pythonプログラム自体がOpenMPIで動作しているため、デバッグはさらに難しくなります。コアダンプはありません。

スタックトレースの先頭は次のとおりです。私はソースラインについて何でもできることを見つけ出すことに興味があります_ZN13BackbonePairs13compute_valueE11ComputeMode+0x5e1。これは明らかに私のBackbonePairs :: compute_value関数ですが、その関数にはスレッドの起動がないので、スタックトレースのlibpthreadについてはわかりません。あなたはGDBにライブラリをロードすると(この情報が利用可能な場合)、コマンド

disas /メートル

は、ソースコードの行と交互にオフセットして分解を示さなければならない

[midway2-0015:35095] *** Process received signal *** 
[midway2-0015:35095] Signal: Segmentation fault (11) 
[midway2-0015:35095] Signal code: Invalid permissions (2) 
[midway2-0015:35095] Failing at address: 0x7fd7633c6000 
[midway2-0015:35095] [ 0] /lib64/libpthread.so.0(+0xf100)[0x7fdb86986100] 
[midway2-0015:35095] [ 1] /home/jumper/upside/py/../obj/libupside.so(_ZN13BackbonePairs13compute_valueE11ComputeMode+0x5e1)[0x7fdb7328c571] 
[midway2-0015:35095] [ 2] /home/jumper/upside/py/../obj/libupside.so(_ZN11DerivEngine7computeE11ComputeMode+0x4c9)[0x7fdb73277a59] 
[midway2-0015:35095] [ 3] /home/jumper/upside/py/../obj/libupside.so(evaluate_energy+0x65)[0x7fdb73202ba5] 
[midway2-0015:35095] [ 4] /software/python_ucs4-2.7.13-el7-x86_64+gcc-6.2/lib/python2.7/lib-dynload/_ctypes.so(ffi_call_unix64+0x4c)[0x7fdb5280e15a] 
[midway2-0015:35095] [ 5] /software/python_ucs4-2.7.13-el7-x86_64+gcc-6.2/lib/python2.7/lib-dynload/_ctypes.so(ffi_call+0x153)[0x7fdb5280cd33] 
[midway2-0015:35095] [ 6] /software/python_ucs4-2.7.13-el7-x86_64+gcc-6.2/lib/python2.7/lib-dynload/_ctypes.so(_ctypes_callproc+0x277)[0x7fdb528042b7] 
[midway2-0015:35095] [ 7] /software/python_ucs4-2.7.13-el7-x86_64+gcc-6.2/lib/python2.7/lib-dynload/_ctypes.so(+0x9b52)[0x7fdb527fab52] 
[midway2-0015:35095] [ 8] /software/python_ucs4-2.7.13-el7-x86_64+gcc-6.2/lib/libpython2.7.so.1.0(PyObject_Call+0x43)[0x7fdb86be79a3] 
[midway2-0015:35095] [ 9] /software/python_ucs4-2.7.13-el7-x86_64+gcc-6.2/lib/libpython2.7.so.1.0(PyEval_EvalFrameEx+0x55ed)[0x7fdb86c9df7d] 

答えて

1

cf: gdb machine code

コンパイラによってインライン展開されたMPIコードを呼び出すとスタックトレースのPthreadが表示されることがあります(ミューテックスのロック/アンロックなど)。

+0

ありがとうございます。他の誰かがこの問題を抱えている場合、disas/mはdisas/sに賛成して非難されました。これは重いインライン展開があるとうまくいきます。 –

関連する問題