我是徐大志

有志者事竟成,破釜沉舟,百二秦关终属楚;
苦心人天不负,卧薪尝胆,两千越甲可吞吴。

debug 调试原理理解

引言:  

  昨天,看了一篇文章,很受启发,记得之前听别的人远程调试过代码,觉得很神奇,在自己程序里打断点,连接远程服务器,开启调试后可以调用远程方法来看数据的输入和输出,不需要查找问题,重新部署,测试问题,直接远程调试,看运行结果,感觉很方便。

 

分析:

  那么,它是怎么实现的呢?

  首先,我想的问题是,它怎么知道我本机的断点在哪?我本机又是怎么输入输出数据?

  之后,我在想本地调试为什么可以?怎么加入的断点?

 

我的观点:

  看了那篇文章之后,了解了在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调试原理】

posted @   我是徐大志  阅读(4928)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
【少年,我看你目光炯炯有神,将来一定能成大事!】
点击右上角即可分享
微信分享提示