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 ...
随机推荐
- ASP.NET MVC 4 (二)控制器
MVC中控制器负责处理请求,由它操作数据模型,最后返回视图给用户. IController接口 所有的控制器类以Controller结尾,必须实现System.Web.Mvc.IController接 ...
- EhCache初体验
一.简介 EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点.Ehcache是一种广泛使用的开源Java分布式缓存.主要面向通用缓存,Java EE和轻量级容器.它具有内存和磁盘存 ...
- android新建的项目界面上没有显示怎么办?
看log也没有说明具体情况? 一翻折腾在清单文件里加了权限就好了!!!
- NUC972裸机调试步骤
.将开发板设置成USB启动.开发板拨码开关与启动方式设置对应如下: 其中PA1 ,PA0对应S1和S0 上电或复位,使开发板从USB启动.开启NuWriter,选择正确的芯片型号,按下“Continu ...
- Repeater的j简单使用
嘿嘿,今天没有任务,所以突然想起来我之前记得笔 记说要把repeater的使用以及获取值的详细使用总结一下,所以这就闲来无聊总结一下,虽然现在不会使用这些小知识点的,但是我感觉自己的学习还是要 不断地 ...
- mysql check约束无效
转自http://blog.csdn.net/maxint64/article/details/8643288 今天在mysql中尝试使用check约束时,才知道在MySQL中CHECK约束是无效的, ...
- 使用dom4j解析xml为json对象
import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j. ...
- 【转载】6种.net分布式缓存解决方案
. 使用内置ASP.NET Cache (System.Web.Caching) : https://msdn.microsoft.com/en-us/library/system.web.cachi ...
- 【Linux】 解决报错: ImportError: libSM.so.6: cannot open shared object file: No such file or directory
centos7 + python3.6.4 我使用 pip3 install opencv-python 安装了opencv-python 之后,在使用 import cv2 报错如下 报错原因 ...
- Delphi应用程序的调试(二)使用断点
Delphi应用程序的调试(二)使用断点 使用断点(Using Breakpoints) 当用户从Delphi IDE 运行程序时,程序全速运行,只会在设置了断点的地方停住. New Term 断点( ...