远程调试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 ...
随机推荐
- struts2中如何使用主题theme
一.什么是主题? 主题就是一种风格化标签,能够让所有UI标签能够产生同样的视觉效果而归集到一起的一组模板,即风格相近的模板被打包为一个主题 二.struts2提供的主题有哪些呢?struts2中如何修 ...
- SpringMVC 的RequestMapping
Spring MVC之@RequestMapping 详解 2013-10-13 23:39 150698人阅读 评论(6) 收藏 举报 分类: Java 精华文章(161) 目录(?)[+] ...
- 两种状态显示处理. enum , Linq AsEnumerable
1.ENUM protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { GridViewRow ro ...
- 和以往印象不同的Java
Java编程概述 一个Java源文件至多有一个public类,但是可以有很多class的定义 public static void main (String args[]) public 代表公共的, ...
- node3
- Android adb常用指令
Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态. 可以通过下列几种方法加入adb: 在设备上运行shell命令 通过端口转发来管理模拟器或设备 从模拟器或 ...
- VC++ Debugger Tips[转]
本文摘自:http://blogs.msdn.com/b/vcblog/archive/2006/08/04/689026.aspx Hi, my name is Sergey Grankin and ...
- fcc
function spinalCase(str) { if(str.split(/\W|_/).length==1){ for(var i=0;i<str.length;i++){ if(/[A ...
- Traceroute命令原理(转)
Traceroute命令基本功能 该命令用于测试两个TCP/IP系统之间的网络层连通性和显示传输路径中每一跳地址,又称为路径跟踪,如果Traceroute命令测试成功,我们能够观察到从源主机到目的主机 ...
- protobuf坑1
或者说特性吧,没仔细看protobuf代码,也许我还理解不够. 按照陈硕大牛的这篇帖子的介绍,“它包含了程序编译的时候所链接的全部 protobuf Message types” 实际开发过程中发现必 ...