毕业时写了一段时间的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完一遍的时候,相信我,你的巅峰之路就开始了!

原文链接:https://my.oschina.net/qiangzigege/blog/2994977

如何使用加多宝(jdb)在linux下调试Java程序的更多相关文章

  1. Linux下执行Java程序报错

    在linux下编译java程序,执行javac编译生成class文件时,在centos7终端输入如,javac hello.java    会提示未找到指令,但用java -verison测试环境变量 ...

  2. linux下分析java程序占用CPU、内存过高

    一.CPU过高分析 1)使用TOP命令查看CPU.内存使用状态可以发现CPU占用主要分为两部分,一部分为系统内核空间占用CPU百分比,一部分为用户空间占用CPU百分比.其中CPU状态中标示id的为空闲 ...

  3. 【linux】linux下运行java程序

    参考了http://www.cnblogs.com/howard-queen/archive/2012/01/30/2331795.html 第一步:用vim先写一个java程序  first.jav ...

  4. linux下分析Java程序内存汇总

    使用pmap查看进程内存 执行命令 使用pmap能够查看某一个进程(非java的也能够)的内存使用使用情况, 命令格式: pmap 进程id 演示样例说明 比如执行: pmap 12358 显示结果例 ...

  5. 使用JDB调试Java程序

    Java程序中有逻辑错误,就需要使用JDB来进行调试了.调试程序在IDE中很方便了,比如这篇博客介绍了在Intellj IDEA中调试Java程序的方法. 我们课程内容推荐在Linux环境下学习,有同 ...

  6. 在Linux下启动Java服务的脚本

    #!/bin/sh #该脚本为Linux下启动java程序的通用脚本.即可以作为开机自启动service脚本被调用, #也可以作为启动java程序的独立脚本来使用. # #Author: tudaxi ...

  7. Linux下使用java获取cpu、内存使用率

    原文地址:http://www.voidcn.com/article/p-yehrvmep-uo.html 思路如下:Linux系统中可以用top命令查看进程使用CPU和内存情况,通过Runtime类 ...

  8. Java学习心得之 Linux下搭建Java环境

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Java学习心得之 Linux下搭建Java环境 1.前言2.JDK安装3.配置环境变量4. ...

  9. linux下安装java

    搞了一年IT了,作为IT人没怎么玩过linux挺丢脸的,要好好整整. 先从熟悉的来,在linux下开发java,首先要搭建环境. linux有一个工具yum,非常好用. 1.yum install j ...

随机推荐

  1. 2016 Multi-University Training Contest 1 部分题解

    第一场多校,出了一题,,没有挂零还算欣慰. 1001,求最小生成树和,确定了最小生成树后任意两点间的距离的最小数学期望.当时就有点矛盾,为什么是求最小的数学期望以及为什么题目给了每条边都不相等的条件. ...

  2. 用单元测试来调试SilverFish AI

    [TestFixture] public class AiTest { [Test] public void Test() { Settings.Instance.LogFolderPath = @& ...

  3. Tomcat安装应用部署及配置文件解读

    Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选. Tomcat和Nginx,APa ...

  4. Kotlin中单例Singleton模式

    package loaderman.bar class Singlenton private constructor(){ public var value:Singlenton?=null priv ...

  5. 代理模式之Cglib代理

    Cglib代理,也叫做子类代理.在内存中构建一个子类对象从而实现对目标对象功能的扩展. l  JDK的动态代理有一个限制,就是使用动态代理的对象必须实现一个或多个接口.如果想代理没有实现接口的类,就可 ...

  6. AnimationUtil

    import android.view.View; import android.view.animation.AlphaAnimation; public class AnimationUtil { ...

  7. Android启动页面的正确打开方式 (转载)

    最近由于领导要求写一个手机APP,于是自学开始,不经意间想到使用过的手机APP在打开的时候都是会有一个启动页面,这是如何实现的呢?比较好奇,于是在网上搜到了以下这篇文章,经过个人实验的确可行,不过原文 ...

  8. Vue.js父子组件如何传值 通俗易懂

    父子组件传值原理图 一般页面的视图App.vue应为这样 一.父组件向子组件传值 1.创建子组件,在src/components/文件夹下新建一个Child.vue 2.Child.vue的中创建pr ...

  9. Mysql执行查询语句慢的解决方式

    MySQL使用的是InnoDB引擎.不同于MyISAM引擎只提供表锁,InnoDB提供不同级别的锁.但是在我们日常的操作过程中经常由于对数据库不当的SQL操作导致出现长时间的锁,造成其他的SQL语句长 ...

  10. Laravel的Nginx重写规则--让路由支持末尾加斜线

    默认laravel路由末尾不能加/,如果加了斜线会报404 要想支持url末尾的斜线需要在public/index.php加入如下代码: $_SERVER['REQUEST_URI'] = trim( ...