临时要调试一个Java程序,于是乎顺便学习一下Java的调试器JDB。配置上的东西不怎么难,但需要一点时间熟悉Java的工具链。所以在这里做个记录。
调试一个程序通常要两步准备,一是往程序中添加调试信息,二是把运行程序时让调试器介入。
如何往Java程序中加入调试信息
如果是直接使用Javac编译程序,那么在命令行加上以下选项:
参考javac的文档。
如果是ant的工程,则在调试对象的target中指定:
具体可以参考ant关于javac的文档中debuglevel一栏。
如何让JDB介入调试对象
JDB调试有本地和远程两种模式。本地模式只须直接调用被调试程序即可,例如:
本地调试有时候不方便,比如调试对象在远程服务器上,这时候远程模式就派上用场了。首先,运行Java虚拟机的时候使调试程序处于等待状态。可以指定Java的命令行选项来达到这个效果:
如果使用ant,可以在Target里面指定相应的属性:
完成上述步骤,调试对象会进入等待jdb连接状态,这时启动JDB连上就可以开始调试了:
更多JDB使用可以参考这篇文章。
**
小瑕疵(Caveats)**
- 有时候JDB无法显示源文件内容,需要在命令行选项
-sourcepath
指定源代码路径。 - 默认情况下JDB遇到一个Exception就会停下来,执行
ignore uncaught java.lang.Throwable
可以避免此现象 - JDB的命令行编辑功能较弱,不能保存历史,听说JLine可以解决这个问题,stackoverflow上有个相应的问题介绍。
- JDB启动的时候可以调用一些初始的命令,可以放在home目录下的
jdb.ini
或者.jdbrc