私はJavaから呼び出されているCコードをデバッグするためにgdbを使用しています。私は実行中のJavaプロセスにgdbを添付して動作します。幾分。最悪のことはGDBは定期的にSIGSEGVを報告しており、Javaをクラッシュさせることはありません。私は、JVMがダウンし、エラーに関する情報を含むhs_err_pidを生成することを期待します。私はそれらの欠陥が実際にgdbによって引き起こされているかどうか、実行中のコードで実際には起こっていないのか、あるいは状況によってはJavaがSIGSEGVから回復できるかどうか疑問に思っています。JavaのSIGSEGVはJVMをクラッシュさせることはできませんか?
編集:ここでは、完全なgdbの出力です:https://pastebin.com/Mk44kWXQ
例:
Thread
52 "java" received signal SIGSEGV, Segmentation fault.
0x00007f9f3a93d4b1 in ??()
-exec-continue
[New Thread 0x7f9ea4b46700 (LWP 10135)]
[New Thread 0x7f9eb4079700 (LWP 10137)]
[Thread 0x7f9eac95e700 (LWP 10130) exited]
Thread
52 "java" received signal SIGSEGV, Segmentation fault.
0x00007f9f3a93d4b1 in ??()
-exec-continue
[Thread 0x7f9ea534c700 (LWP 9960) exited]
これはあまりにも曖昧だと思います。 gdbセッションの完全なターミナルダンプをインクルードする場合は、それはもっと紛らわしいかもしれません。 – unwind
Java VMが別のサンドボックスでCコードを実行すると、サンドボックス内のsegフォルトがJava VMをクラッシュさせることはありません。 –
@PaulOgilvie - これを実行したJavaの実装について聞いたことはありません。これはCとJavaの間の切り替えを高価にし、(かなりの程度)JavaからCを呼び出す目的を無効にします。 –