一个关于debug的问题

作为开发人员对程序进行跟踪调试是一个必须具备的能力。在 java里由于底层的jvm提供的jpda(Java Platform Debugger Architecture)的功能,对于用java开发的程序,并且以命令行的方式启动的java程序来说。我们都可以在java命令行里加入诸如 -Xdebug -Xrunjdwp:transport=dt_socket,address=8234,server=y,suspend=n这样的jvm参数给你的 java程序开启debug的功能。有关详细用法可以参考jpda的相关文章。

这里主要记录一下,一个有关debug中遇到的一个问题。编写的一个后台运行的程序,发布到了远程的linux机器上,对其进行远程的debug 跟踪,发现可以通过端口进行连接,但是进入不了断点。该启动的东西都启动了,但是就是当程序执行的时候,应该执行到的断点,迟迟不能进入呀。开始以为是 IDE的问题。换IDE,问题依旧在,还是烦恼中呀。查看后台的日志,也没有什么诡异的地方,这个问题也就搁浅于此了,虽然困惑了我有好几天了。但是不影 响到功能的东西,还是暂时放到一边吧。也许这个问题冥冥之中就是属于我的,在给程序切换log4j的时候,无意中发现了,当程序用log4j替换,输 出%l的时候,发现出现unknown source。一时。恍然大悟般。

log4j出现unknow source表示java compile source的时候,debug level进行了设置。如果是这样的。有可能jpda也无法根据binary获得准备的debug info,从而导致,可以连上debug,但是获取不到相关debug info,这样也进入不了source设置的断点了。这是推测,马上打开相应的jar,确实发现和本地的class的大小不一致,也许这里就是问题所 在,javac -g:none极为不加入调试信息。这里莫非。 打开构建项目的构建文件,发现果然在javac的task里,没有指定debug的值,而默认的值是off。关掉debug info的。

打开debug。重新构建,现在的class的大小一样了,在linux一发布,打开debug,连接上了。

困惑的问题解决了,能够debug的感觉真不错呀。

你可能感兴趣的:(一个关于debug的问题)