JDB的使用

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

背景

在本地开发的时候一版遇到问题都是通过debug去排查调试,如果在测试环境有问题需要调试,那么就可以采用JDB的方式,其实idea等开发工具debug的原理也是这个。前提是要指定debug端口。

所有的操作都要先打断点

1、线上程序使用jdb

jdb -connect sun.jvm.hotspot.jdi.SAPIDAttachingConnector:pid=

例如:

jdb -connect sun.jvm.hotspot.jdi.SAPIDAttachingConnector:pid=6620

Image1.png

1.1 线上运行jar

启动

nohup java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9966 -jar InterfaceParallel.jar > /dev/null &

使用jdb连接

jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=9966

1.2 debug 后台进程

  • 1、 修改启动脚本,添加jvm参数(9966为监控端口)

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9966

  • 2、使用jdb监听指定端口

jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=9966

Image3.png

Image2.png

  • 3、设置断点

Image4.png

然后一直运行,进程会自动停在断点处

Image5.png
可以查看变量了

Image6.png

1.3 debug web界面

  • 1、修改jvm参数,增加参数

-Xdebug
-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9977

Image7.png

Image8.png

2、普通程序使用jdb

例如:

javac -g CZ.java
jdb CZ

3、常用命令

1、设置断点

1.1 stop in 类.方法名

例如:(在main方法设置断点)

stop in CZ.main

Image9.png

1.2 sotp at 类:行号

例如:

sotp at CZ:5

Image10.png

2、cont 向下运行直到断点

例如:

cont

Image11.png

3、locals 查看输出当前堆栈帧中的所有局部变量

locals

Image12.png

4、methods 获取当前类的所有方法

methods 类名
例如:

methods CZ

Image13.png

5、step 执行当前行

step
print 变量名
例如:

Image14.png

6、使用list查看源代码运行的位置

list

Image15.png

7、step up 执行当前方法

Image16.png

8、clear 列出断点

Image16 [2].png

9、dump 查看实体内容

dump object

Image17.png

之后遇到继续更新。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值