2016-02-05 26 views
0

我很難理解如何調試我的C++代碼和關聯的分叉Java進程。我已經得到了C++代碼,它分離出一個.jar SWING文件。這將打開一個Java窗口並等待用戶輸入...使用Eclipse調試JNI/C++庫和進程

我創建了一個C++ eclipse項目,它成功編譯了C++和Java源代碼。兩個編譯都使用-g編譯器標誌。但是當我在調試模式下運行時,我只能通過最初的C++代碼。在fork語句(啓動JAVA SWING代碼)後,我無法逐句通過Java代碼。下一步直接轉到叉子的陳述。我使用JNI調用來調用在編譯時創建的C++共享對象庫。

我讀過其他人關於開始他們的Java應用程序,然後通過JNI調用調用C++的帖子。但我正在做相反的事情。我從我的C++代碼開始,然後分叉java進程。

無論哪種方式,我似乎需要將我的分叉的Java進程附加到當前的C++ eclipse調試會話。我該如何去做呢?一個簡單的例子將不勝感激。

+1

分叉進程不能進行調試,除非這些進程完全在C++代碼中定義。調用JVM正在使用不適用於GDB調試器的單獨代碼。 –

回答

0

您必須在C++中使用Java調試的命令行選項創建Java VM。爲了向監聽器運行Java進行調試您通過以下選項,然後在Eclipse調試對話框中(如果8000端口是不是免費的,你可以選擇其他地址)

-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n 

創建「遠程Java應用程序」。在「連接屬性」中的「端口」字段中使用您的選項中的地址(默認爲8000)。在Java代碼中設置一些斷點並按下「調試」。如果您需要調試Java啓動時發生的代碼,您可以在選項中使用suspend=y,那麼VM在啓動之前將等待來自調試器的連接。

如果您無法更改Java進程的選項,那麼您的運氣不好。

編輯:文檔http://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html告訴我,-Xrun現在-agentlib。不知道,因爲我多年來一直在使用上述選項,他們還沒有停止工作。