我是新的OS X開發人員,來自更加面向Linux的背景。 我有一個Java應用程序的問題,所以決定抓住一個系統調用跟蹤,看看它在做什麼。在爲應用程序使用dtruss時,我遇到了不一致的行爲。在OS X下執行操作時會在跟蹤java時給出一致的結果嗎?
再進一步,我然後把範圍縮小到最簡單的情況下,我能想到的,使用它寫入使用System.out.println一個Java的HelloWorld:
bash-3.2$ sudo java HelloWorldApp 2>/dev/null
Hello World!
bash-3.2$ sudo dtruss -f java HelloWorldApp 2>dtruss.out
bash-3.2$
應用程序是不同的行爲運行時通過dtruss - 或者我正在使用dtruss /從dtruss捕獲輸出的方式犯了一個錯誤。
我試着使用OpenJDK 7的Linux中,這表現爲我本來期望另一個快速測試:
[email protected]:~$ sudo java HelloWorldApp 2>/dev/null
Hello World!
[email protected]:~$ sudo strace -f java HelloWorldApp 2>strace.out
Hello World!
[email protected]:~$
是dtruss可靠在所有情況下,在OS X上抓取系統調用的痕跡,例如對於Java?
在我的dtruss命令+輸出捕獲上面有一個明顯的錯誤嗎?
編輯:
OS X 10.9 的Java(TM)SE運行時環境(建立1.7.0_51-B13) 爪哇熱點(TM)64位服務器VM(建立24.51-B03,混合模式)
編輯2:
在一個root shell,而不是作爲運行sudo的具有相同的結果:
bash-3.2# java HelloWorldApp 2>/dev/null
Hello World!
bash-3.2# dtruss -f java HelloWorldApp 2>dtrace.out
bash-3.2#
我給這個再試一次,這次在根shell中運行,但有類似的結果。我已將信息添加到原始帖子的編輯。 – tom
對不起。上面的方法應該可以讓你得到你想要的。我不知道行爲上的差異是因爲java被跟蹤還是運行在不同的環境中。 –