[英]how can I debug a jar at runtime?
我從一個非常奇怪的位置(從我的java-newbie觀點來看):
使用Eclipse我寫了一個“java程序”(一些帶有類的.java文件),它基本上(批處理)讀取文本* .csv文件,“評估”其內容,並將結果寫入* _out.csv文本文件。 要找到輸入文件,它使用“文件選擇器”(從此處獲取示例: http : //docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html )
我調試了所有代碼,並使用調試器, 它的工作原理 。
我運行了代碼(主類,它按順序調用所有其他代碼), 它 在Eclipse中運行 。
我將所有項目的內容導出到“runnable jar”文件中。
請注意,文件選擇器分開,這主要是一個讀寫的“批處理”:幾乎沒有用戶界面。 在Eclipse中,我使用類似“ if(debug)System.out.print(”要打印的東西“)的內容顯示了一些內部結果; ”在生產環境中提供設置“ debug ”為TRUE而調試時為FALSE。
所有上述工作!
現在,啟動runnable jar(雙擊jar文件,在Win / XP中), 我可以看到文件選擇器,我可以使用它但是,在選擇輸入文件之后...... 僅此而已 :(沒有用戶界面) )我不知道文件是否被讀取,我沒有看到任何生成的輸出文件,我甚至沒有“控制台”列出任何中間調試消息,看看jar是否正常工作,即使我重新-export,調試變量設置為TRUE。
有沒有辦法“運行時調試”正在運行的jar(如VB的MsgBox,或其他東西)? 某種“日志文件”我可以“啟用”或查看? (很明顯,因為我的jar沒有寫結果文件,所以我也不能嘗試編寫* .log)我還要說我不能在我的機器上安裝除Eclipse之外的東西(幸運的是它跑了),所以沒有通常的開發人員的工具,實用程序和其他有用的東西。
http://www.eclipsezone.com/eclipse/forums/t53459.html
基本上運行它:
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=1044
啟動時,應用程序將一直等到您從其他來源連接。
使用特殊選項啟動java
命令時,可以激活JVM的調試功能:
java -agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y -jar path/to/some/war/or/jar.jar
在命令行上啟動jar.jar
會:
server=y
)的角色中偵聽端口8000( address=8000
) Listening for transport dt_socket at address: 8000
到stdout
和 suspend=y
)直到某個調試器連接。 在此方案中,調試器充當客戶端 。 選擇調試器的常用選項有:
jar.jar
應該開始執行。 jdb -connect com.sun.jdi.SocketAttach:port=8000
啟動它 即使它是一個可運行的jar,你仍然可以從控制台運行它 - 打開一個終端窗口,導航到包含jar的目錄,然后輸入“java -jar yourJar.jar”。 它將在該終端窗口中運行,並且sysout和syserr輸出將出現在那里,包括來自未捕獲異常的堆棧跟蹤。 編譯時一定要將調試設置為true。 還有祝你好運。
只是想到了別的東西 - 如果你在Win7上,它通常會有用戶應用程序將文件寫入特定目錄的權限問題。 確保您編寫輸出文件的目錄是您具有權限的目錄。
在未來的項目中,如果它足夠大,您可以使用標准日志記錄工具之一進行“調試”輸出; 然后將它重定向到文件而不是依賴於控制台將很容易(ier)。 但對於像這樣的小工作,這應該沒問題。
使用IntelliJ IDEA
您可以創建Jar Application
運行時配置,選擇JAR
,源代碼,運行Jar
的JRE
並開始調試。 這是文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.