引言:
昨天,看了一篇文章,很受啟發,記得之前聽別的人遠程調試過代碼,覺得很神奇,在自己程序里打斷點,連接遠程服務器,開啟調試后可以調用遠程方法來看數據的輸入和輸出,不需要查找問題,重新部署,測試問題,直接遠程調試,看運行結果,感覺很方便。
分析:
那么,它是怎么實現的呢?
首先,我想的問題是,它怎么知道我本機的斷點在哪?我本機又是怎么輸入輸出數據?
之后,我在想本地調試為什么可以?怎么加入的斷點?
我的觀點:
看了那篇文章之后,了解了在c程序里,如果以調試模式運行,會把程序的斷點翻譯成一個中斷【int 3】,運行到斷點處,就保存執行狀態,執行父級監控操作,之后父級更新子級的執行狀態,載入保存信息,繼續執行程序。
在【java】里,有JVM的存在,可以省好多事,分三層
1.JVMIT【虛擬機接口】,底層
2.JDWP【虛擬機傳輸協議,格式】,中間傳輸
3.JDI【程序調試接口】,發送指令控制接口
我個人理解是,把水流切斷,處理,再放回去,對執行透明,比較像面向切面編程
而本機部署有熱加載能力,可以把修改類或者斷點生成的中斷及時加載到運行程序里,run模式就不可行
像解剖一樣,想看了,切開看看,看完再還原回去繼續運行,【高維監視】
文章鏈接:
http://blog.jobbole.com/23463/ 【中斷原理】
https://www.ibm.com/developerworks/cn/java/j-lo-jpda1/ 【JVM調試原理】