jdb--gdb---java 远程调试(java application与web application)

摘要:
下面将会对javaapplication和webapplication两种入手进行说明。此时在命令行执行java-jardebug.jar,出现如下图:在java-jar中加入其他的启动信息,则程序会开启远程调试模式,并处于阻塞状态,如下:1java-Xms700m-Xmx700m-Xdebug-server-Xrunjdwp:transport=dt_socket,server=y,address=12345-jardebug.jarname1其中address为指定的端口。如果server端没启动,则意味着端口没监听,会报Connectionrefused;否则程序根据设置的断点进入执行。
命令比较
gdb jdb
bt where
del clear
stop break
finish step up
更多
http://www.fas.harvard.edu/~cscie119/resources/jdb_reference.pdf
5)如果想看但 source code
用命令
jdb -classpath robocode/libs/robocode.jar:bin -sourcepath src
内部设置 sourcepath 用 "use"
一个是直接调用jdb Classname的话调试时没法列出源程序代码,至少在我这里是这样,要用
jdb -classpath . Classname
── lib
│ ├── jars
│ │ ├── lwjgl.jar
│ │ ├── lwjgl_util.jar
│ │ └── slick-util.jar
│ └── natives-linux
│ ├── libjinput-linux64.so
│ ├── libjinput-linux.so
│ ├── liblwjgl64.so
│ ├── liblwjgl.so
│ ├── libopenal64.so
│ └── libopenal.so
├── LICENCE
  1. Specify the path to lwjgl.jar in the classpath.
  2. Add -Djava.library.path option for inserting the lwjgl natives.
  3. Use the full name of the class using also the package. Ex. com.ionsoft.engine.Engine
  1. # JVM server
  2. java -classpath ./build/classes:./lib/jars/lwjgl.jar -Djava.library.path=./lib/natives-linux -agentlib:jdwp=transport=dt_socket,address=localhost:8888,server=y,suspend=ycom.ionsoft.engine.Engine
  3. # JDB client
  4. jdb -sourcepath ./src -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8888

如摘要中所述,在联调时经常性的需要将程序部署到测试机器上,此时要调试显得很不方便。以前的做法都是在程序中打印信息来进行追踪,但是这种方法很有局限性,因为往往无法一次就定位到有问题的地方,需要不断的修改程序打印的语句,不断的重启应用,这需要花费大量的时间和精力。因此,采用远程调试会是一种好的解决方式。下面将会对java application和web application两种入手进行说明。

一、Java Application的远程调试

1、准备要调试的server端环境

首先准备一段小的代码,并且在main方法中调用,我这边写了一段没有任何意义的代码,仅仅是为了演示需要,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
packagecom.zzq.test;
/**
*@authorzhengzhqE-mail:zzq0324@qq.com
*@version创建时间:2015-9-4下午02:59:35
*/
publicclassRemoteDebug{
publicstaticvoidcheckName(Stringname){
if("name1".equals(name)){
System.out.println("thisisname1");
}elseif("name2".equals(name)){
System.out.println("thisisname2");
}else{
System.out.println("unknowname"+name+"!!!");
}
}
publicstaticvoidmain(String[]args){
if(args.length>0){
checkName(args[0]);
}else{
checkName("unknow");
}
}
}

如果运行中有传递值,将第一个值作为name传递给方法,很简单的代码。通过开发工具export-runnable jar,指定好执行的Main class->finish,jar包生成完成,我这边导出为debug.jar。此时在命令行执行java -jar debug.jar,出现如下图:

jdb--gdb---java 远程调试(java application与web application)第1张

在java -jar中加入其他的启动信息,则程序会开启远程调试模式,并处于阻塞状态,如下:

1
java-Xms700m-Xmx700m-Xdebug-server-Xrunjdwp:transport=dt_socket,server=y,address=12345-jardebug.jarname1

jdb--gdb---java 远程调试(java application与web application)第2张

其中address为指定的端口。

2、指定调试的client端环境

调试的代码由于本地环境拥有,所以直接在IDE中右击->debug As->Debug Configurations,弹出如下窗口,在Remote Application下可以配置要远程调试的项目:

jdb--gdb---java 远程调试(java application与web application)第3张

配置完成后,点击弹出窗下的debug,则程序自动会与调试的server端连接上。如果server端没启动,则意味着端口没监听,会报Connection refused;否则程序根据设置的断点进入执行。

jdb--gdb---java 远程调试(java application与web application)第4张

jdb--gdb---java 远程调试(java application与web application)第5张

二、Web Application

将应用打成war包放到tomcat/webapps目录下,然后设置tomcat/conf/startup.sh,在前面加入如下的脚本

1
SETCATALINA_OPTS=-server-Xdebug-Xnoagent-Djava.compiler=NONE-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=12345

然后启动即可,启动过程中会有打印一行关于远程调试监听:

jdb--gdb---java 远程调试(java application与web application)第6张

客户端的配置与Java Application一致,运行即可进行调试i

免责声明:文章转载自《jdb--gdb---java 远程调试(java application与web application)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇前端工程打开速度优化的循序渐进总结windwos源码安装mysql下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

shell调试技术

一. 前言 shell编程在unix/linux世界中使用得非常广泛,熟练掌握shell编程也是成为一名优秀的unix/linux开发者和系统管理员的必经之路。脚本调试的主要工作就是发现引发脚本错误的原因以及在脚本源代码中定位发生错误的行,常用的手段包括分析输出的错误信息,通过在脚本中加入调试语句,输出调试信息来辅助诊断错误,利用调试工具等。但与其它高级语...

Mvc示例代码调试之一----调试工具及设置(用firebug与vs联合调试)

设置IIS调试    调试前的的话 在编写bs程序时,需要调试程序。这时,我们可以用vs自带的调试器;但是这个调试器经常崩溃,而且经常变换端口。那么,有没有更好的方式呢?我们可以用IIS进行调试。但是,许多朋友写了很长时间的bs程序机子上却没有安装IIS。那么我们提出一个问题,IIS的安装时机是什么时候呢?如果安装顺序错误如何补救呢?    IIs的安装时...

C#中的release和debug模式

以下内容来源:https://www.cnblogs.com/rgjycs/p/9254332.html 在程序调试时的debug和release 网上有如下的描述:Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好...

使用 VSCode 在 Mac 上配置 C/C++ 调试环境

Background VSCode是微软开发的一款开源代码编辑器,具有可拓展性强,多语言支持,跨平台等优点,在不同的个性化配置下几乎可以用作所有的轻量级开发。我在初学C的时候也使用的是类似于Xcode、Visual Studio等大型IDE来新建一个C语言工程,编写一个仅含有main函数的文件,显得过于大材小用了。后来学校推荐使用的Code::Blocks...

zz-rtl8188eu的linux-usb-wifi调试及驱动编译150210

//zz//#######################################################################zz-rtl8188eu的linux-usb-wifi调试及驱动编译150210zz-Write:@2015-2-4 22:11:14@2015-2-11 00:32:07@REF:嵌入式linux us...

gdb命令调试技巧

gdb命令调试技巧 一、信息显示1、显示gdb版本 (gdb) show version2、显示gdb版权 (gdb) show version or show warranty3、启动时不显示提示信息gdb -q exe 或者.bashrc 添加alias gdb="gdb -q",重启shell4、退出时不显示提示信息(gdb) set confirm...