私のプログラムは hdfs の読み取り/書き込みに libhdfs.so を使用しています。デバッグ用にブレーク ポイントを設定したいのですが、このプログラムを hdfsConnect のポイントまで実行すると、セグメンテーション フォールトで終了します。
興味深いことに、プログラムを正常に実行すると、セグメンテーション違反はまったく発生しません。
根本的な原因は何ですか?libhdfs.so をデバッグするときにセットアップする必要があるランタイム環境はありますか?
libhdfs.so 固有の問題ではなく、JNI の問題であることが判明しました。解決策は次の場所にあります 。jni を介して c++ から Java コードを呼び出している間の奇妙な sigsegv
根本的な原因は何ですか?
考えられる根本的な原因は、プログラムのバグであり、GDB ではクラッシュとして現れますが、GDB の外で実行すると隠れたままになります。
これにより、問題のデバッグが容易になります。反対の場合 (GDB の外部でクラッシュし、GDB の下で動作する) は、多くの場合、より困難になります。
最初のステップは、Valgrind の下でプログラムを実行し、クリーンであることを確認することです。