远程调试Java程序
java 可以以调试模式启动,启动后可以使用 jdb 对程序进行调试。以调试模式启动,需要加入以下参数:
java -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n
一般如 tomcat, jboss, weblogic 等服务器中会使用 JAVA_OPTS 环境变量,如果要运行这类服务,可以设置该环境变量如下:
linux 下
export JAVA_OPTS="$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n"
JAVA_OPTS="$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n"
windows 下
set JAVA_OPTS=%JAVA_OPTS% -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n
maven 使用 MAVEN_OPTS 参数,设置跟上面的类同
以下是一个简单的服务器端代码,接收 UDP 请求
package mm; import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket; public class UServer { public static void main(String[] args) throws IOException {
DatagramSocket socket = new DatagramSocket(8000);
while (true) {
DatagramPacket dataPackage = new DatagramPacket(new byte[100], 100);
socket.receive(dataPackage);
System.out.println("Receive from : "
+ dataPackage.getAddress().getHostName());
System.out.println("Data: [" + new String(dataPackage.getData()) + "]");
dataPackage.setData("abc你好".getBytes());
socket.send(dataPackage);
}
} }
通过以下命令运行该服务器:
java -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n mm.UServer
通过以下命运运行 jdb,即可进行调试
[root@server test] # jdb -attach 192.168.1.79:8787 -sourcepath .
Set uncaught java.lang.Throwable
Set deferred uncaught java.lang.Throwable
Initializing jdb ...
> stop at mm.UServer:12
Set breakpoint mm.UServer:12
>
Breakpoint hit: "thread=main", mm.UServer.main(), line=12 bci=11
12 DatagramPacket dataPackage = new DatagramPacket(new byte[100], 100); main[1] next Step completed: "thread=main", mm.UServer.main(), line=13 bci=25
13 socket.receive(dataPackage); main[1] main[1] next
> next
Nothing suspended.
>
Step completed: "thread=main", mm.UServer.main(), line=14 bci=30
14 System.out.println("Receive from : " main[1] !!
next Step completed: "thread=main", mm.UServer.main(), line=15 bci=42
15 + dataPackage.getAddress().getHostName()); main[1] main[1] !!
next
>
Step completed: "thread=main", mm.UServer.main(), line=14 bci=55
14 System.out.println("Receive from : " main[1] !!
next
>
Step completed: "thread=main", mm.UServer.main(), line=16 bci=58
16 System.out.println("Data: [" + new String(dataPackage.getData()) + "]"); main[1] !!
next
>
Step completed: "thread=main", mm.UServer.main(), line=17 bci=95
17 dataPackage.setData("abc你好".getBytes()); main[1] !!
next
>
Step completed: "thread=main", mm.UServer.main(), line=18 bci=104
18 socket.send(dataPackage); main[1] !!
next
>
Step completed: "thread=main", mm.UServer.main(), line=11 bci=109
11 while (true) { main[1] !!
next
>
Step completed:
Breakpoint hit: "thread=main", mm.UServer.main(), line=12 bci=11
12 DatagramPacket dataPackage = new DatagramPacket(new byte[100], 100); main[1]
调试的主要命令有
- stop at 在指定行设置断点
- stop on 在指定的方法设置断点
- next 单步执行到下一步
- !! 重复最后一次命令
目前 eclipse 中已经集成了 jdb,可以在 eclipse 的 debug 选项中设置连接远程主机进行远程调试
远程调试Java程序的更多相关文章
- 服务器时间误差导致的google sign-in后台验证错误(远程调试java程序)
https://developers.google.com/identity/sign-in/web/backend-auth import com.google.api.client.googlea ...
- Eclipse远程调试Java程序
1. 在服务器上运行jar包时加入参数 -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address= 2. 在Eclipse中操作 ...
- java远程调试(断点)程序/tomcat( eclipse远程调试Tomcat方法)
tomcat远程调试: 1.Linux中配置tomcat在catalina.sh中添加如下CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_soc ...
- eclipse远程debug Java程序
使用Eclipse JPDA远程调试Java程序 本文将介绍使用Eclipse JPDA,在Eclipse的开发环境下对远程运行的Java程序进行调试操作. 请按以下步骤进行(本人已经在Eclipse ...
- 使用 Eclipse 远程调试 Java 应用程序
Eclipse 中的远程调试特性 Eclipse 是一个图形化 Java 调试器前端.JDI 在 org.eclipse.jdt.debug 包中实现.本文不详细讨论 JDI 实现.参见 参考资料 获 ...
- 使用jvisualvm远程监控Java程序
使用Java自带的jvisualvm调试Java程序,可以查看CPU.内存.线程等信息,还可以进行Dump,无疑是一个利器 由于客户端是Windows.服务端是Linux,并且是最小安装的Linux, ...
- 使用jvisualvm的jstatd方式远程监控Java程序
使用Java自带的jvisualvm调试Java程序,可以查看CPU.内存.类及线程等信息,还可以进行Dump,无疑是一个利器 由于客户端是Windows.服务端是Linux,并且是最小安装的Linu ...
- 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 ...
随机推荐
- SQL Server 常用函数
1.DATEADD 在向指定日期加上一段时间的基础上,返回新的 datetime 值. 语法 DATEADD ( datepart , number, date ) 参数 datepart 是规定应向 ...
- Trie 最长前缀匹配串的实现
http://blog.csdn.net/hguisu/article/details/8131559
- cassandra的写过程
如下: Message, get a new request,type:QUERY //channelRead0函数 Message, get a new request,customPay ...
- HTML字体及颜色设置
字体(FONT)标记(TAGS) 标题字体(Header) <h#> ... </h#> #=1, 2, 3, 4, 5, 6<h1>今天天气真好!</h1& ...
- ServiceStack.OrmLite中的一些"陷阱"(3)
前文说到如果使用多数据库(不同SQL方言)时要如何开发?其实前文(第二篇)也有“透露”到.就是直接使用库提供的OrmLiteConnection 及OrmLiteConnectionFactory(I ...
- MySQL数据库安装与配置详解
转载提示:在原文http://www.cnblogs.com/sshoub/p/4321640.html基础上修改. 目录 一.概述 二.MySQL安装 三.安装成功验证 四.NavicatforMy ...
- netload 加载程序集抛异常----无法加载程序集解决办法
netload 加载程序集抛异常----无法加载程序集 错误信息如下: 无法加载程序集.错误详细信息: System.BadImageFormatException: 未能加载文件或程序集“file: ...
- 封装ios静态库碰到的一些问题(一)
封装IOS动态库,碰到的第一个问题,就是资源文件的问题,如果将你的程序封装成为静态库,那么静态库中不会包含资源文件和xib文件,这个时候就需要自己封装bundle文件了,而笔者开发环境默认是xcode ...
- UI线程和work线程
UI线程处理消息,比如重绘,响应键盘鼠标等等跟消息有关的处理. 而工作线程一般是你自己写的用来处理数据的,比如操作数据库等等.(work线程)
- 网页加载图片原理<转>
http://www.haorooms.com/post/web_http_request 图片的http请求,有很多种情况,那么究竟什么情况下面不会发生请求呢?下面我用案例一一列举一下,希望对你深入 ...