jdb--gdb---java 远程调试(java application与web application)
命令比较
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
- Specify the path to lwjgl.jar in the classpath.
- Add -Djava.library.path option for inserting the lwjgl natives.
- Use the full name of the class using also the package. Ex. com.ionsoft.engine.Engine
- # JVM server
- 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
- # JDB client
- 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
|
package com.zzq.test;/** * @author zhengzhq E-mail:zzq0324@qq.com * @version 创建时间:2015-9-4 下午02:59:35 */public class RemoteDebug { public static void checkName(String name) { if ("name1".equals(name)) { System.out.println("this is name1"); } else if ("name2".equals(name)) { System.out.println("this is name2"); } else { System.out.println("unknow name " + name + "!!!"); } } public static void main(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,出现如下图:

在java -jar中加入其他的启动信息,则程序会开启远程调试模式,并处于阻塞状态,如下:
|
1
|
java -Xms700m -Xmx700m -Xdebug -server -Xrunjdwp:transport=dt_socket,server=y,address=12345 -jar debug.jar name1 |

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

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


二、Web Application
将应用打成war包放到tomcat/webapps目录下,然后设置tomcat/conf/startup.sh,在前面加入如下的脚本
|
1
|
SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=12345 |
然后启动即可,启动过程中会有打印一行关于远程调试监听:

客户端的配置与Java Application一致,运行即可进行调试i
jdb--gdb---java 远程调试(java application与web application)的更多相关文章
- Java远程调试 java -Xdebug各参数说明
JAVA自身支持调试功能,并提供了一个简单的调试工具--JDB,类似于功能强大的GDB,JDB也是一个字符界面的 调试环境,并支持设置断点,支持线程线级的调试 JAVA的调试方法如下: 1.首先支持J ...
- java远程调试(断点)程序/tomcat( eclipse远程调试Tomcat方法)
tomcat远程调试: 1.Linux中配置tomcat在catalina.sh中添加如下CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_soc ...
- Eclipse快速入门:远程调试Java应用
Eclipse快速入门:远程调试Java应用 2012年03月27日00:00 it168网站原创 作者:皮丽华 编辑:皮丽华 我要评论(0) 标签: Eclipse , Java , Java框架, ...
- Eclipse远程调试Java代码的三种方法
Eclipse远程调试Java代码的三种方法, 第1种方法是用来调试已经启动的Java程序,Eclipse可以随时连接到远程Java程序进行调试, 第2种方法可以调试Java程序启动过程,但是Ecli ...
- paip. java resin 远程 调试 java resin remote debug
paip. java resin 远程 调试 java resin remote debug 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 ...
- GDB + gdbserver 远程调试android native code
原文地址:GDB + gdbserver 远程调试android native code 作者:tq08g2z 以调试模拟器中的native library code为例. Host: ubuntuT ...
- Caused by: java.lang.ClassNotFoundException: Illegal access: this web application instance has been stopped already. Could not load [org.jboss.netty.util.internal.ByteBufferUtil]. The following stack
Caused by: java.lang.ClassNotFoundException: Illegal access: this web application instance has been ...
- java.lang.IllegalStateException: Illegal access: this web application instance has been stopped already. Could not load [META-INF/services/com.alibaba.druid.filter.Filter].
九月 11, 2019 2:56:36 下午 org.apache.catalina.loader.WebappClassLoaderBase checkStateForResourceLoading ...
- 远程调试Java程序
java 可以以调试模式启动,启动后可以使用 jdb 对程序进行调试.以调试模式启动,需要加入以下参数: java -Xdebug -Xrunjdwp:transport=dt_socket,addr ...
随机推荐
- scala中to和util操作
// Range:to:默认步进为1 val to1 = 1 to 10 println(to1) // 定义一个不进为2的Range val to2 = 1 to 10 by 2 println(t ...
- informix中的时间计算
今天看SUN服务器是的mail(vi /var/mail/xxxuser),发现定时任务上的一些存储过程执行有错误,其中有一个错误是long transaction,长事务错误,到数据库一查,天哪 ...
- Nginx 域名重定向
假设 www.old.com 为旧的域名,而 www.new.com 为新的域名,要实现当我们访问 new 的时候自动重定向到 old 域名,配置如下: server { //第一种配置方法 serv ...
- 3dmax osg格式导出插件 osgExp OpenSceneGraph Max Exporter
https://sourceforge.net/projects/osgmaxexp/files/OpenSceneGraph%20Max%20Exporter/
- Bugly最简单的配置方法
1,注册Bugly帐号 2.项目 build.gradle 中配置 compile 'com.tencent.bugly:crashreport:latest.release'//其中latest.r ...
- VC调用DLL
VC调用DLL 调用DLL有两种方法:静态调用和动态调用. (一).静态调用其步骤如下: 1.把你的youApp.DLL拷到你目标工程(需调用youApp.DLL的工程)的Debug目录下; 2. ...
- Git学习(一)(2015年11月12日)
环境:win10 已安装git工具(如未配置环境变量需先配置环境变量) 如何配置环境变量:.我的电脑-属性-高级系统设置-环境变量-系统变量 找到path然后在变量值结尾增加路径: ;C:\Progr ...
- MFC 三种消息
在MFC应用程序中传输的消息有三种类型:窗口消息.命令消息和控件通知. (1)窗口消息:WM_XXX 窗口消息(Window Message)一般与窗口的内部运作有关,如:创建窗口.绘制窗口和销毁窗口 ...
- VC++生成不同的随机数
其用法是先调用srand函数,如 srand( (unsigned)time( NULL ) ) 这样可以使得每次产生的随机数序列不同.假如计算伪随机序列的初始数值(称为种子)相同,则计算出来的伪随机 ...
- Sencha Touch 实战开发培训 视频教程 第二期 第五节
2014.4.16 晚上8:20分开课. 本节课耗时没有超出一个小时,主要讲解了Sencha Touch 结合百度地图的用法. 本期培训一共八节,前两节免费,后面的课程需要付费才可以观看. 本节内容: ...