如何使用加多宝(jdb)在linux下调试Java程序
毕业时写了一段时间的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完一遍的时候,相信我,你的巅峰之路就开始了!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
「WTF系列」深入Java中的位操作
「WTF系列」深入Java中的位操作 关于WTF系列 引 学完本章节你将学会位的基础概念与语法,并且还会一些骚操作!! 与、或、非、位移 原码、反码、补码 字节、位、超区间...... 开始本章节之前,我们先思考一个问题: byte a = 33; byte b = -3; 若我们输出a、b的二进制字符串是多少? 答案是这样的么? a->// 00100001 b->// 10100001 当然同学们可能会觉得我既然问了就肯定不是这样;是吧~别着急你们试试就知道了。 在Java中输出一个值对应的二进制方法有很多,这里提供一个简单的方法: int value = 33; String bs = String.format("%32s", Integer.toBinaryString(value)).replace(" ", "0"); 在方法中是int值,int占4字节32位,所以是:“%32s” 若是byte将32改成8即可;当然对于byte你还需要加上**“&0xFF”**来做高位清零操作。 String bs = String.format("%8s", Int...
- 下一篇
缓存穿透、缓存击穿和缓存雪崩实践
我们使用缓存的主要目是提升查询速度和保护数据库等稀缺资源不被占满。而缓存最常见的问题是缓存穿透、击穿和雪崩,在高并发下这三种情况都会有大量请求落到数据库,导致数据库资源占满,引起数据库故障。今天我主要分享一下layering-cache缓存框架在这个三个问题上的实践方案。 概念 缓存穿透 在高并发下,查询一个不存在的值时,缓存不会被命中,导致大量请求直接落到数据库上,如活动系统里面查询一个不存在的活动。 缓存击穿 在高并发下,对一个特定的值进行查询,但是这个时候缓存正好过期了,缓存没有命中,导致大量请求直接落到数据库上,如活动系统里面查询活动信息,但是在活动进行过程中活动缓存突然过期了。 缓存雪崩 在高并发下,大量的缓存key在同一时间失效,导致大量的请求落到数据库上,如活动系统里面同时进行着非常多的活动,但是在某个时间点所有的活动缓存全部过期。 常见解决方案 直接缓存NULL值 限流 缓存预热 分级缓存 缓存永远不过期 layering-cache实践 在layering-cache里面结合了缓存NULL值,缓存预热,限流、分级缓存和间接的实现"永不过期"等几种方案来应对缓存穿透、击...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Linux系统CentOS6、CentOS7手动修改IP地址
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- 设置Eclipse缩进为4个空格,增强代码规范
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- 2048小游戏-低调大师作品