美文网首页
远程调试代码

远程调试代码

作者: Statham_Jessie | 来源:发表于2020-12-23 09:39 被阅读0次

远程debug调试java代码

日常环境和预发环境遇到问题时,可以用远程调试的方法本地打断点,在本地调试。生产环境由于网络隔离和系统稳定性考虑,不能进行远程代码调试。

整体过程是通过修改远程服务JAVA_OPTS参数,然后本地通过Eclipse或IDEA等工具调试。

下面简单介绍下理论。

理论

JPDA(Java Platform Debugger Architecture)是Java平台调试体系结构的缩写。由3个规范组成,分别是JVMTI(JVM Tool Interface),JDWP(Java Debug Wire Protocol),JDI(Java Debug Interface) 。

1.JVMTI定义了虚拟机应该提供的调试服务,包括调试信息(Information譬如栈信息)、调试行为(Action譬如客户端设置一个断点)和通知(Notification譬如到达某个断点时通知客户端),该接口由虚拟机实现者提供实现,并结合在虚拟机中

2.JDWP定义调试服务和调试器之间的通信,包括定义调试信息格式和调试请求机制

3.JDI在语言的高层次上定义了调试者可以使用的调试接口以能方便地与远程的调试服务进行交互,Java语言实现,调试器实现者可直接使用该接口访问虚拟机调试服务。 java调试工具jdb,就是sun公司提供的JDI实现。eclipse IDE,它的两个插件org.eclipse.jdt.debug.ui和org.eclipse.jdt.debug与其强大的调试功能密切相关,其中前者是eclipse调试工具界面的实现,而后者则是JDI的一个完整实现。

远程调试

远程调试分为主动连接调试,和被动连接调试。这里以Eclipse为例。

主动连接调试:服务端配置监控端口,本地IDE连接远程监听端口进行调试,一般调试问题用这种方式。

被动连接调试:本地IDE监听某端口,等待远程连接本地端口。一般用于远程服务启动不了,启动时连接到本地调试分析。

主动连接调试

首先需要远程服务配置启动脚本:

JAVA_OPTS="$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000"

如果是启动jar包,指令:

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 -jar test.jar 

这里-Xdebug是通知JVM工作在DEBUG模式下,-Xrunjdwp是通知JVM使用(java debug wire protocol)来运行调试环境。transport是监听Socket端口连接方式(也可以dt_shmem共享内存方式,但限于windows机器,并且服务提供端和调试端只能位于同一台机)。server=y表示当前是调试服务端,=n表示当前是调试客户端。suspend=n表示启动时不中断(如果启动时中断,一般用于调试启动不了的问题)。address=8000表示本地监听8000端口。

远程服务(tomcat/jboss)启动成功后,本地Eclipse对需要调试的地方打上断点,然后项目右键启动远程调试:Debug as->Debug Configurations->Remote Java Application。Host为远程主机IP,Port为远程监听调试端口,Connection Type为:Standard(Socket Attach),如图:

点击Debug,然后打断点,远程服务运行到断点处本地就会中断,然后进行调试。

被动连接调试

首先需要Eclipse配置监听,如主动连接调试的Eclipse配置图片,Connection Type选择:Standard(Socket Listen),配置本地监听端口,比如默认8000。点击Debug开始等待远程连接调试。

然后配置远程服务启动脚本:

JAVA_OPTS="$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:8000,suspend=y"

如果是调试jar包,指令:

java -Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:8000,suspend=y -jar remoting-debug.jar

参数含义和主动连接调试一样,只是这里suspend=y表示启动时就中断,需要连接本地IDE调试启动。address=ip:port,ip需要修改为本地的对外IP。

这样远程项目启动时就连接到本地,方便调试项目启动不了的问题。

总结

另外除了在启动脚本如上配置外,还可以用这种方式配置:

启动时:sh catalina.sh jpda start。修改启动时是否中断或本地监听端口,设置变量值:JPDA_SUSPEND=y JPDA_ADDRESS=9999。

原文出自https://www.cnblogs.com/jpfss/p/10271498.html

相关文章

  • CentOS7 desktop openstack queens

    引用 neutron通过pycharm调试Pycharm 下远程调试 Neutron 简介 远程代码同步 远程调试...

  • IDEA 远程调试Java代码

    远程服务启动配置 远程调试java代码需要在java代码启动的时候配置远程调试的端口。而且启动的参数和jdk的版本...

  • 远程调试代码

    远程debug调试java代码 日常环境和预发环境遇到问题时,可以用远程调试的方法本地打断点,在本地调试。生产环境...

  • java远程调试

    本文档实现调用远程接口,远程服务调用本地代码调试。(保持本地代码和远程代码一致) 远程服务器配置在远程服务器启动参...

  • idea远程debug

    远程调试 使用特定JVM参数运行服务端代码 要让远程服务器运行的代码支持远程调试,则服务器端的jar包启动的时候必...

  • 使用IDEA调试线上的项目

    为什么想要远程调试? 远程调试能够帮我解决线上代码调试难的问题,可以像在本地debug程序一样来调试已部署在服务器...

  • Pycharm调试远程代码

    前言 有时候python项目部署到线上后会出现一些bug,这时就可以通过本地pycharm连接到远程服务器去调试代...

  • idea 调试远程代码

    IDEA配置 在IDEA里打开【运行/调试配置】窗口,新建一个Remote对话框(点击绿色+号,在下拉框里可以选择...

  • devstack远程代码调试

    前言 devstack安装完毕 本地安装vscode,依赖插件remote-ssh vscode远程连接 下载re...

  • 使用IDEA进行远程调试

    假设我们现在想要调试dubbo服务,想通过操作远程的web,走本地代码上的断点调试代码。 Server 1.打开i...

网友评论

      本文标题:远程调试代码

      本文链接:https://www.haomeiwen.com/subject/kikynktx.html