2013-07-20 76 views
0

我遇到了類似於我之前介紹的here的問題。ptrace使用C/C++的Java程序

這次我想用c/C++編寫的程序來跟蹤JAVA程序的執行情況。所以正如我之前所說的跟蹤stdout打印c/C++和註冊系統調用4的相同代碼還沒有爲JAVA做過。我認爲這是因爲我跟蹤的execlp僅用於運行jvm。後來創建了更多的流程(通過jvm的內部機制),我不追蹤它。我發現這個似乎是部分解決方案的topic。如果我做對了,每個孩子都會被追蹤。但這也是一個問題,我只想跟蹤處理我的應用程序的進程,而不是所有jvm可能創建的進程。有沒有機會知道哪個jvm線程/進程處理我的程序並只跟蹤它?

爲了讓它更容易讓我們假設我的JAVA程序是單線程的。

回答

0

如果通過跟蹤器應用程序啓動二進制文件,將跟蹤所有線程。

但是,如果你附加到一個進程,那麼你將不會附加到它的所有線程。你必須使用threadids附加到它的所有線程,你可以找到列出例如。在/ proc /%d/task /中。

此外,我建議通過strace的源代碼閱讀,我從中學到了很多東西。如果你可以使用strace來成功的遵循java線程,你可以從中得到邏輯。