如何使用加多宝(jdb)在linux下调试Java程序

毕业时写了一段时间的C,那时候调试使用gdb,后来转了java,当时就想java程序怎么调试,找了一下,果然,那就是jdk自带的jdb

windows里是这样的

13be3c3eac14c56bb87dd70346f01ab2734.jpg

Linux下是这样的

4ad6ec71eaa91b7b96a0edba1a9b081351e.jpg

一般我在linux下来调试Java程序

 好,那么,问题来了,这玩意怎么用?有好几种玩法

第一种玩法:以经典的HelloWorld为例,先写一个Java程序,如下:

d7a0249682c6b6fc29538dee128dc033f7b.jpg

我们把编译好的类上传到linux下,如下所示

0c757627f395d90372d98fe69f4311b912f.jpg

务必强调一下:类所在的包名的层次结构也要在linux下体现出来

下面我们来玩起来,在linux下操作如下

02bf1822b5fbd3e4fad266cefb24d1f5caa.jpg

程序顺利debug,每次都输出当前的位置,就是line=5 这样的,也可以使用where来查看当前的线程栈,如下所示

e18e0fb34cf82a35a7617debfb66f115ad0.jpg

 

好,到这里,入门完成,读者可能一脸懵逼,debug过程中没法看到源码啊,这是因为我们只有class,没有java文件

下面我们把java文件上传上来,可以上传到任何一个目录,只要后面正确指定就行了,创建一个文件夹

a18c775fdc7adaac6761b1cf81fe92a2d09.jpg

然后按照层次结构把源码上传上来

fbdb120d498872eb3a22c42fa3d66830ac2.jpg

让我们重新组织下jdb的命令如下

a4e8854b80eff55ce0ab3407650a2ce01ea.jpg

开心吗?简单的debug就可以进行了

 

有的同学说我有很多jar,不是类,这也是可以的,自己多尝试一下,没有问题,碰到问题百度下

 

上面是通过jdb来启动一个程序,也有一种情况是程序在linux上跑得好好的,我想去调试的时候去调试,不想调试的时候让它自己运行不去打扰它

以我最近调试的flink为例,ps -ef一把看一下

965569fc27e3bed91031d4d0771d6e8eb1c.jpg

程序启动的命令行里加上这些参数,然后怎么使用呢?在你想要去debug它的时候,使用下面的命令

0ec7a5e5a2c02df143db562c1ea2cd748da.jpg

这个时候,jdb已经跟目标进程建立了关系,因为断点还没有触发,所以我们什么都看不到,我们尝试来发送一条消息到kafka来触发这个断点的hit

7738227c51538cc8ce005513b5c444ba3ce.jpg

顺利命中,这里没有源码出现,是因为我没有放源码,我是在本地eclipse里打开java代码对比着看,读者也可以上传到linux下来玩,方法上面已经说过了

执行一把where看详细的当前位置

066f06dfb123f653fd23c2c51144e645c36.jpg

时刻提醒你是谁,你在哪,你在干什么,别迷失了方向,迷茫的时候就执行一把where就会找到新的方向

这种方式不用指定class在哪,因为我们是连接到进程来实现debug,进程都起来了,也不用担心class的识别了

好,简单的debug其实已经可以了,下面讲一下jdb的命令有哪些

传送门:https://blog.csdn.net/xiaodejun5241/article/details/8162923

读者可以在实践中来掌握这些命令的使用

 

当你把所有源码都debug完一遍的时候,相信我,你的巅峰之路就开始了!

转载于:https://my.oschina.net/qiangzigege/blog/2994977

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值