回归简单实用的java调试工具JDB

arthas idea plugin 插件,arthas 使用更加丝滑起来 一、背景 目前Arthas 官方的工具还不够足够的简单,需要记住一些命令,特别是一些扩展性特别强的高级语法,比如ognl获取spring context 为所欲为,watch、trace 不够简单,需要构造一些命令工具的信息,因此只需要一个能够简单处理字符串信息的插件即可使用。当在处理线上问题的时候需要最快速、最便捷的命令,因此Idea arthas 插件还是有存在的意义和价值的。 二、支... 阅读详情

  早期搞过java的人应该都接触过jdb,那时候写个java程序用的都是记事本,调试用得是jdb,现在有了eclipse,已经很少人会用记事本和jdb来开发java程序了,从我接触到的搞Java开发的人,说起框架啥的都是很清楚,但的确很少有人熟悉JDB,更别说java是如何进行调试的了。

  现在负责系统的运维,大多使用的都是weblogic,一出问题就头大,开发商写的程序太烂,日志也不全,自己写了一个GUI程序来显示运行时的线程,变量信息,工作量还是挺大的,最近没忙那个程序,回想起了这个JDB,这里记下来常用的操作,生产系统使用jdb来调试程序还是会有很多好处的,比如说线程卡了,是卡在什么地方,参数是什么。

首先要在java程序启动的时候加上参数-Xrunjdwp:transport=dt_socket,address=localhost:9191,server=y,suspend=n  -Dcom.sun.management.jmxremote.port=9001 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false

然后运行jdb -connect com.sun.jdi.SocketAttach:"port=9191,hostname=localhost"连接上

为什么这个地方要加上localhost:9191,呢,不直接写address=9191呢,这个是防止外部的地址连接调试端口,只能在本地连接9191端口,这样在生产系统上开启的话风险要小很多

./jdb -connect可以显示所有的选项

后面是具体的命令事例

//查询出当前所有的线程
> threads
组 system:
  (java.lang.Thread)0x405                         RMI TCP Accept-0             正在运行
组 main:
  (java.lang.Thread)0x408                         Main Thread                  正在休眠
>
//选定0x408的线程
> thread 0x408
Main Thread[1]
//暂停当前线程
Main Thread[1] suspend 0x408
Main Thread[1]
//显示线程堆栈
Main Thread[1] where
  [1] java.lang.Thread.sleep (本机方法)
  [2] TestCase.testOutMemory (TestCase.java:33)
  [3] TestCase.main (TestCase.java:99)
Main Thread[1]
//通过向上命令转移到关注的方法上
Main Thread[1] up
Main Thread[2] where
  [2] TestCase.testOutMemory (TestCase.java:33)
  [3] TestCase.main (TestCase.java:99)
Main Thread[2]
//显示局部变量
Main Thread[2] locals
方法参数:
局部变量:
i = 1
j = 164
Main Thread[2]
//显示全局变量
Main Thread[2] dump this
 this = {
    data: instance of java.util.ArrayList(id=1034)
}
//Dump支持的参数如下:
    "false" ...
    "new" ...
    "null" ...
    "super" ...
    "this" ...
    "true" ...
    <INTEGER_LITERAL> ...
    <FLOATING_POINT_LITERAL> ...
    <CHARACTER_LITERAL> ...
    <STRING_LITERAL> ...
    <IDENTIFIER> ...
    "(" ...
    "!" ...
    "~" ...
    "++" ...
    "--" ...
    "+" ...
    "-" ...
//Dump类下面的对象
Main Thread[2] dump this.data
 this.data = {
    serialVersionUID: 8683452581122892189
    elementData: instance of java.lang.Object[88256] (id=1035)
    size: 63796
    java.util.AbstractList.modCount: 63796
}
Main ThreaMain Thread[2] dump this.data.elementData
//设置断点
Main Thread[2] stop at TestCase:33
设置 断点 TestCase:33
Main Thread[2] resume
所有线程已恢复。
>
断点命中: "thread=Main Thread", TestCase.testOutMemory(), line=33 bci=35


Main Thread[1] resume
所有线程已恢复。
>

java实战之在线调试Arthas Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。 阅读详情

相关推荐

在线调试工具 Arthas

Arthas(阿尔萨斯) 是 Alibaba开源的 Java诊断工具,深受开发者喜爱。 当遇到以下类似问题而束手无策时,Arthas 可以帮助你解决: 【1】这个类从哪个 jar 包加载的? 为什么会报各种类相关的 Exception? 【2】我改的代码为什么没有执行到? 难道是我没 commit? 分支搞错了? 【3】遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 【4】线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现! 【5】是否有一个全局视角来查看系统.

程序猿进阶 6833

mysql jdb_使用JDB进行调试

在预发环境下进行debug时,时常因为工具和环境的限制,导致debug体验非常差,那么有什么方法能够简化我们进行debug的体验吗?JDB就是一种。JDB是 The Java Debugger 的简称,它可以用来debug一个Java程序,同时它是 JPDA 的一个参考实现,只是这个实现是基于命令行的。提到命令行,有些同学心里就犯嘀咕了,离开了GUI,能debug吗?当然可以,只要熟记几个命令,在...

weixin_30773813的博客 494

Java技术栈中的高效测试与调试技巧

通过使用断言、单元测试框架、日志记录和调试器,我们可以提高代码的质量和稳定性,快速定位和修复错误。在实际开发中,合理运用这些技巧,可以有效地提高测试和调试效率,帮助开发人员构建高质量的Java应用程序。在Java开发中,测试和调试是确保应用程序质量和稳定性的关键环节。本文将介绍一些在Java技术栈中提高测试和调试效率的技巧和实践方法,并附上相应的源代码示例。通过编写单元测试,可以确保代码的正确性,并在后续开发中进行回归测试。通过使用调试器,可以深入分析代码执行过程,找到隐藏的错误和潜在的问题。

TechWhizZ的博客 143

Arthas-java在线调试工具的使用

一、arthas能干什么? 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现! 是否有一个全局视角来查看系统的运行状况? 有什么办法可以监控到JVM的实时运行状态? 怎么快速定位应用的热点,生成火焰图? 怎样直接从JVM内查找某个类的实例? Arthas支持JDK 6+

fen_dou_shao_nian的博客 5220

GOM Correlate拉伸试验后处理操作

本文描述了使用GOM Software 2022对拉伸试样进行后处理的操作,包括设置检测点、引伸计、输出应变数据到表格、输出报告为视频等

qq_45008924的博客 4662

Zynq UltraScale+网络加速方案:用AXI Ethernet Subsystem实现2.5G吞吐量的配置秘籍

本文详细介绍了在Xilinx Zynq UltraScale+平台上使用AXI Ethernet Subsystem实现2.5Gbps网络吞吐量的配置方法。通过硬件设计优化、Vivado工程配置、Linux驱动调优及性能测试等关键步骤,为工业视觉和5G前传等高速网络应用提供可靠解决方案。

weixin_30485379的博客 614

Java如何远程调试线上项目

如果要进行远程调试需要添加。在普通启动命令之前是。

Java日常记录 2412

科研党必备:5个高效查找论文开源代码的宝藏网站(附实战技巧)

本文为科研工作者推荐5个高效查找论文开源代码的宝藏网站,包括ResearchCode和PapersWithCode等工具,提供实战技巧如进阶搜索语法和代码质量评估体系,帮助快速定位高质量实现并提升复现效率。特别分享隐藏代码库的检索方法和智能工作流配置,助力科研党高效完成论文复现。

weixin_28829629的博客 401

Java调试——回归基础

  目前可以用来调试Java应用程序的工具令人叹为观止。现代IDE提供了全功能的调试界面,并且像GlassBox这样的工具用BCI(bytecode instrumentation)提供了关于应用程序运行时状态的更多信息。虽然你有时候会发现自己处于无法使用这些工具的境地,或许应用程序被部署在防火墙的另一端,不允许你远程调试;或许你正在客户那里,没有你喜欢的工具可用。现代调试工具使用的大多数信息和...

greentiro 273

抖音批量取消关注神器:5行JS代码搞定,告别手动操作(附详细步骤)

本文介绍了一种利用JS脚本在抖音创作者平台批量取消关注的高效方法。通过浏览器开发者工具执行简单的JavaScript代码,即可自动化模拟点击操作,快速清理大量关注列表,告别繁琐的手动操作。文中提供了详细的步骤和核心代码,适合有一定技术基础的用户参考。

weixin_29009971的博客 596

MMCV安装后报错‘from mmcv import Config’?别慌,这是MMCV 2.0的锅!快速降级回退MMCV 1.x全指南

本文详细解析了MMCV 2.0版本升级导致的‘from mmcv import Config’报错问题,提供了从诊断到降级回退MMCV 1.x的完整解决方案。通过pip和OpenMIM工具链的实操指南,帮助开发者快速解决版本冲突,确保项目稳定运行。

weixin_29102619的博客 263

高级09-Java调试技巧:快速定位与修复问题

Java调试技巧精要 本文系统介绍了Java调试的核心流程与工具集。调试是结构化的问题解决过程,涵盖问题复现、信息收集、假设验证、根源定位、修复测试和预防改进六个关键步骤。Java开发者常面临编译错误、运行时异常、逻辑缺陷、性能瓶颈、并发问题和内存泄漏等多种挑战。 Java生态提供了丰富的调试工具链,包括IDE集成调试器(IntelliJ/Eclipse)、JPDA标准架构及JDK命令行工具(jdb/jps/jstack/jmap等)

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

[原创]Step by step 实现自己的AI知识库问答(二)

对小白很友好的AI智能问答开发保姆级教程,适合初级开发者、学生阅读参考,无限制分享,欢迎转载。在这个章节中,我们使用了百度千帆作为知识库,通过简单的代码调用API实现了智能问答。

BaiRiYiSanJin的博客 1470

如何调试一个程序

测试,python,程序调试,java

唐古的博客 1267

【Unity3D框架】GameFramework框架完全教程《全网最全》-专栏文章目录

最近准备学习框架,了解到GameFramework框架是国产Unity3D框架,准备学习一下,但是奈何全网关于这个框架的教程实在太少。为了让自己学习方便一些,也为了让后来者乘凉。将框架以自己的理解整理目录,并且补全教程。觉得教程有帮助别忘了一键三连哦。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 2万+

VMware16虚拟机:下载和安装教程

VMware16 虚拟机 下载和安装教程

MQ0522的博客 20万+

velocity.exception.ParseErrorException: Encountered "<EOF>"

velocity.exception.ParseErrorException: Encountered "&lt;EOF&gt;" Was expecting one of: "(" ...&lt;RPAREN&gt; ...&lt;ESCAPE_DIRECTIVE&gt; ...&lt;SET_DIRECTIVE&gt; ..."##" ..."\\\\" .

iteye_15819的博客 601

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【Java可执行命令】(六)调试工具 jdb:深入解析应用程序调试工具jdb ~

jdb是一个功能强大且灵活的 Java 调试器,提供了一系列功能和选项来帮助开发者定位、调试和修复 Java 应用程序中的问题。通过设置断点、单步调试、监视变量等操作,开发者可以深入了解程序的执行状态,并进行错误排查和性能调优。尽管jdb的命令行界面对于新手而言可能有一定的学习曲线,但通过熟悉其语法和常用选项,开发者可以更加高效地利用jdb进行调试工作。同时,需要注意在合适的情况下使用jdb,并遵循最佳实践以确保有效地使用调试器工具。

Technology changes the world of life 7681

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

JDB的步骤

通过JDBC操作数据库——步骤: 1:注冊驱动 (仅仅做一次) Class.forName(“com.mysql.jdbc.Driver”); 2:建立连接(Connection) 通过Connection建立连接,Connection是一个接口类。其功能是与数据库进行连接(会话)。 建立Connection接口类对象: Connection conn =DriverManager.getConnection(url, user, password); 当中URL的格式要求为: JDBC:子协议:子名称//

weixin_45682831的博客 634

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

阿里调试排错 - Java应用在线调试Arthas

调试排错 - Java应用在线调试Arthas 本文主要介绍Alibaba开源的Java诊断工具,开源到现在已经1.7万个点赞了,深受开发者喜爱。@pdai 调试排错 - Java应用在线调试Arthas Arthas简介 Arthas是什么 Arthas能解决什么问题 Arthas资源推荐 Arthas基于了哪些工具上发展而来 同类工具有哪些 Arthas入门 Arthas 上...

pdai的博客 3039

开发技术-使用 JDB 调试

Java 调试器(JDB)是 JDK 内置的命令行工具。从调试的指令和命令行接口两方面看的话,JDB 至少从概念上是 GNU 调试器(GDB,受 Unix DB 的影响)的继承者。程序运行到第16行时发生异常,但是 JDB 在异常发生时就不复存在。现在程序将运行到下个断点处,在这个例子中就是异常发生的地方。接着 JDB 就会运行,出现命令行提示。查看可用的 JDB 命令。命令 catch Exception 在任何抛出异常的地方设置断点。在文件夹中出现编译后的 class 文件。4.执行 JDB 命令。

JustDI0209的博客 2015

强大的在线调试工具 Arthas

通过上面的代码分析我们知道了JDK的这两项功能: VirtualMachine InstrumentationArthas的整体逻辑也是在jdk的Instrumentation基础上实现的,所有加载的类会通过Agent加载,addTransformer之后再进行增强,然后将对应的Advice织入进去,对于类的查找,方法的查找,都是通过SearchUtil来进行的,通过Instrument的loadAllClass方法将所有的JVM加载的class按名字进行匹配,再进行后续处理。

程序猿进阶 9731

Java进程在线调试、诊断的方法

Java服务CPU占用过高怎么定位?内存泄露、OOM问题如何解决?如何观察Java服务中的某个类方法的入口参数和返回值内容?等等,这些Java开发中可能出现的问题该如何解决呢,使用现成的工具、平台会非常的方便。 Jarboot 是一个强大的Java进程启动、调试、诊断的平台,可以在线管理、监控及诊断一系列的Java进程。 首先呢,分为两种进程,一种是由Jarboot启动、管理的进程,一种则是服务器中所有的非Jarboot启动的其他进程。受Jarboot管理的在运行的服务可以直接调试、诊断问题不需要手动的

baidu_36206948的博客 1516

java内存调试工具(5)

jhat会分析一个dump文件,然后把结果发布到一个html服务器上,有一定的用途,html也是主要看histogram。jdk自带调试工具,在产线环境恶劣的情况下,比如内网隔离,传输信息困难,难以拿到本地调试,没有window环境,初步检查系统的情况下使用。也是监控内存,cpu,线程,类信息和参数的。jstack是比较有用的一个命令,查看线程的情况,包含锁,俗称javacore。是一个比较好用的工具,界面功能更强大,界面更友好。查看jvm的内存,cpu信息,线程,参数,类信息。有几个比较重要的信息。

denganming1214的博客 4241

JDB-Java调试器

JDB这款工具集成在JDK中,在安装Java时已经自带,不需要特殊安装。它是一款基于文本和命令行的调试工具,现在很多的Java IDE中都提供了完善的断点调试功能,很方便,这也导致很多的开发人员认为这很原始,既然有更好的调试工具选择,很多人都放弃使用这款工具。JDB基本用法如下代码所示。其中的options包括用于以有效的方式调试Java程序的命令行选项。JDB启动器接受所有选项(例如-D-classpath和-X)和一些其他高级选项,如(-attach-listen-launch等)。

qq_30436011的博客 1561

arthas:Java调试利器,线上Debug不是梦

Arthas(阿尔萨斯) 是阿里开源的一个Java在线分析诊断工具,相信会对大家有很大帮助

m0_59679869的博客 6901
上一篇: 反向代理的设计
下一篇: windows8和常用软件安装和设置
itsobserver
博客等级 码龄15年 0粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值