2014-09-06 25 views
0

我有一個本機C++代碼,用於啓動JVM並調用Java方法。其中一種Java方法會調用可能包含需要調試的錯誤的本機代碼。但是,每當從通過JNI調用的本地代碼(C和C++)中引發致命錯誤(例如訪問衝突)時,JVM就會自動中止程序,同時它應該讓調試器向我顯示代碼中有問題的部分以及其他有用的信息信息。我目前僅限於使用Visual Studio 2013 Express在Windows上開發,但也歡迎其他開發環境的建議。調試通過JNI調用的本地代碼(並在遇到致命錯誤後阻止JVM中止程序)

+0

SEH(結構化異常處理)是否在構建JNI模塊時打開?如果是這樣,那麼可以使用傳統的'try/catch'來捕獲訪問衝突。 – PaulMcKenzie 2014-09-06 06:35:45

+0

哦,用Visual Studio,它是'屬性 - >配置屬性 - > C/C++ - >代碼生成'。確保「啓用C++異常」設置爲「是的,使用SEH」。 – PaulMcKenzie 2014-09-06 06:38:01

+0

@PaulMcKenzie我試着用try/catch塊試着SEH異常,並且這種方法在停止程序執行(有斷點)方面做得很好,並且阻止JVM自動中止程序。但是,我無法準確指出錯誤的位置(文件和行號),我想特別在有多個嵌套函數調用時使用。 – kes5219 2014-09-06 06:56:22

回答

0

確保您已打開Structured Exception Handling打開了您的JNI模塊。

在Visual Studio IDE:

Properties -> Configuration Properties -> C/C++ -> Code Generation -> Enable C++ Exceptions

確保 「是的,SEH」 被選中。這將允許您使用傳統的try/catch來處理例外訪問違規。

相關問題