以前都是很土得打 log ,發現一篇關於 java 調試器架構 ,以及 eclipse 上使用 的文章,在常用的 intellij idea 以及 tomcat 上調試成功,結合調用堆棧希望可以加快 ``how tomcat works`` 讀書進度。
原理: http://blog.csdn.net/alli0968/article/details/42176721
1. tomcat 7.0.5 啓動支持調試
新建文件 setenv.bat
- SET CATALINA_OPTS=-server -Xdebug -Xnoagent
- -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
放入 tomcat 下 bin/ 中(和 startup.bat)同級。
2. 點擊 startup.bat 啓動,控制檯輸出調試支持日誌表示成功配置:
- Listening for transport dt_socket at address: 8000
3. idea remote debug 配置
打開已有的 web 類型項目,設置運行配置
找到 remote 子項,選擇新增配置
輸入項目名稱,端口設置 tomcat 配置的 8000,並選擇源碼所在模塊,調試模式爲 attach
點擊 ok 關閉設置窗口
4. 在源碼上設置斷點後,點擊調試按鈕
調試窗口輸出
- Connected to the target VM, address: 'localhost:8000', transport: 'socket'
表示正常連上了遠端(localhost)服務器。
5.啓動調試
使用瀏覽器訪問對應服務器應用,啓動調試,運行到客戶端斷點時,就可以查看當前幀變量與堆棧信息了:
再進一步關聯 tomcat 源碼 則可以瞭解到請求在 servlet 容器中的一系列轉發過程了。