文档章节

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

强子1985
 强子1985
发布于 2018/12/29 08:59
字数 873
阅读 1787
收藏 65

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

windows里是这样的

Linux下是这样的

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

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

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

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

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

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

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

 

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

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

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

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

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

 

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

 

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

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

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

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

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

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

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

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

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

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

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

 

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

© 著作权归作者所有

共有 人打赏支持
强子1985

强子1985

粉丝 882
博文 1183
码字总数 871407
作品 8
南京
架构师
私信 提问
加载中

评论(14)

强子1985
强子1985

引用来自“我还在等你回家”的评论

作者我想转发一下你这篇文章,留你的原文地址,可以嘛
没问题
我还在等你回家
我还在等你回家
作者我想转发一下你这篇文章,留你的原文地址,可以嘛
hengbao5
hengbao5
围观一下
强子1985
强子1985

引用来自“sdvdxl”的评论

引用来自“强子1985”的评论

引用来自“gm100861”的评论

远程调试eclipse也是支持的,用jdb有点费劲,呵呵.
习惯吧,哈哈,个人习惯在linux下玩,尽量模拟运行环境,eclipse一般用来看源码

线上可以用btrace

@sdvdxl 工具有很多,根据目的选择工具就行咯
sdvdxl
sdvdxl

引用来自“强子1985”的评论

引用来自“gm100861”的评论

远程调试eclipse也是支持的,用jdb有点费劲,呵呵.
习惯吧,哈哈,个人习惯在linux下玩,尽量模拟运行环境,eclipse一般用来看源码

线上可以用btrace
强子1985
强子1985

引用来自“斯武丶风晴”的评论

远程调试也可以嘛

@斯武丶风晴 应该可以,不过我一般都是本地
斯武丶风晴
斯武丶风晴
远程调试也可以嘛
强子1985
强子1985

引用来自“fzn0268”的评论

有时候远调会抽,断点停不住,只有用这个

@fzn0268 我一直用这个
f
fzn0268
有时候远调会抽,断点停不住,只有用这个
g
gm100861

引用来自“gm100861”的评论

问一下jdb可以指定断点断在第几行吗?

引用来自“强子1985”的评论

可以的,stop at a.b.c.d:123 类似这样的
好的,多谢. 以后遇到问题了可以尝试一下这个方法😄
JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jstat

jstack -- 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具...

anfield
2010/12/02
0
5
Valgrind使用

调试是一项主要的软件开发活动,作为应用程序开发人员,您无法避免对程序进行调试。有效的调试不仅能缩短软件开发周期,而且可以节省成本。本文简要介绍了在用户空间的 C/C++ 和 Java? 应用程...

长平狐
2012/09/03
1K
0
JVM性能调优监控工具jps、jstack、jstat、jmap、jinfo使用详解

是什么 jps 查看所有的jvm进程,包括进程ID,进程启动的路径等等。 我自己也用PS,即:ps -ef | grep java jstack 观察jvm中当前所有线程的运行情况和线程当前状态。 系统崩溃了?如果java程...

xionghuiCoder
2015/08/13
0
0
JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, js...

jstack -- 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具...

老大做IT
2013/05/02
0
0
weblogic debug配置

1.1. 软件环境 Eclipse 3.1 Weblogic 8.1 1.2. 工作原理 远程调试就是允许利用 java tools 里面的jdb 程序连接远程的JAVA虚拟机,进行远程debug ,同时远程的虚拟机启动时候需要开启 debug ...

ianLi
2012/11/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

大数据教程(11.9)hive操作基础知识

上一篇博客分享了hive的简介和初体验,本节博主将继续分享一些hive的操作的基础知识。 DDL操作 (1)创建表 #建表语法CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name ...

em_aaron
今天
0
0
OSChina 周四乱弹 —— 我家猫真会后空翻

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @我没有抓狂 :#今天听这个# 我艇牛逼,百听不厌,太好听辣 分享 Led Zeppelin 的歌曲《Stairway To Heaven》 《Stairway To Heaven》- Led Z...

小小编辑
今天
2
0
node调用dll

先安装python2.7 安装node-gyp cnpm install node-gyp -g 新建一个Electron-vue项目(案例用Electron-vue) vue init simulatedgreg/electron-vue my-project 安装electron-rebuild cnpm ins......

Chason-洪
今天
3
0
scala学习(一)

学习Spark之前需要学习Scala。 参考学习的书籍:快学Scala

柠檬果过
今天
3
0
通俗易懂解释网络工程中的技术,如STP,HSRP等

导读 在面试时,比如被问到HSRP的主备切换时间时多久,STP几个状态的停留时间,自己知道有这些东西,但在工作中不会经常用到,就老是记不住,觉得可能还是自己基础不够牢固,知识掌握不够全面...

问题终结者
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部