zoukankan      html  css  js  c++  java
  • java远程调试和skywalking agent代码的远程调试

    https://blog.csdn.net/tengdazhang770960436/article/details/85254026

    1.调试java程序

    1.1.远程程序启动设置

    java -jar 启动参数 xxx.jar ,注意启动参数位置(在-jar之后,要启动的jar包之前),其中5005是远程调试端口(注意远程服务器要打开这个端口),示例如下:

     java -jar -Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=5005 log4j-test-0.0.1-SNAPSHOT.jar

    1.2.idea配置

    • 1.在Host中填写远程ip,在Port中填写debug的端口。
    • 2.设置远程jar包对应的本地源码项目
    • 1.3.启动远程的程序

    •  java -jar -Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=5005 log4j-test-0.0.1-SNAPSHOT.jar

      jar 包启动后在日志中打印如下日志说明启动成功:

      Listening for transport dt_socket at address: 5005
    • 1.4.启动idea调试

    • 方式2:

    • https://blog.csdn.net/lvshow/article/details/82491785
    • 在被调试的java程序启动的时候设置虚拟机运行参数

      例如 

      java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=65532 -jar xxx.jar

      -jar xxx.jar 是要启动的可运行的jar包

      如果jar包内的java代码不像tomcat这种属于一直在后台运行的程序则会出现刚启动还没来得及打开调试器程序就结束了

      这时候需要设置suspend=y 即让程序启动后等待调试器debugger连接上65532这个监听端口后再继续运行

      如果是调试tomcat 则只需要在tomcat启动的时候传入jpda参数即可

      例如:

    • catalina jpda start

      因为catalina脚本里判断如果传入上述参数则运行一下语句,如下

    • if not "%JPDA_OPTS%" == "" goto gotJpdaOpts
      set JPDA_OPTS=-agentlib:jdwp=transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND%
      :gotJpdaOpts

      具体说明在catalina 脚本注释里,如下

      如果tomcat 是注册为windows服务启动的,则catalina.bat脚本不会被执行,所以在脚本设置虚拟机参数也不会生效

    • 2.tomcat 远程调试

      2.1.tomcat配置

      • 1.编辑 catalina.sh 文件
      • 2.在文件的 # OS specific support. 位置添加如下配置
      • export JAVA_OPTS='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005'
      • skywalking 的agent如何调试了
      • 列如order应用使用了skywalking的agent,我们在启动order应用的时候我们就携带上
        -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005这几个参数说明order应用运行的时候开启了远程调试的功能
      • 第二步:我们在idea或者eclipse中我们导入skywalking agent的源码,这里一定要保证agent的源码版本和order应用中使用的agent的代码一致
      • 接下来,在idea或者eclipse中开启远程调试的功能,填写的ip为远程的order应用的ip,端口为
        address=5005中指定的端口,运行程以debug的方式运行
      •  

         我们来看下面的这样一个案例

      •  我们启动simple-jvm-agent-aop这个应用的时候,我们使用target-java.jar这个agent,并且我们开启了远程调试访问的功能

      • 接下来我们在idea中导入target-java.jar所在源码,这里因为jvm-agent-aop就是agent所在的运行的进程和simple-jvm-agent-aop都是运行在本地的所以下面配置远程的ip地址都是localhost,端口是5005,这样我们就远程调试了
  • 相关阅读:
    Indy的TCPServer到底能支持多少个连接
    Delphi TStream 详细介绍
    WebAPI下的如何实现参数绑定
    使用 Weinre 调试移动网站及 PhoneGap 应用
    面向对象的三大特征:封装、继承、多态
    轻量级前端MVVM框架avalon
    三种工厂模式的分析以及C++实现
    简单实现TCP下的大文件高效传输
    Nunit NMock Ncover单元测试
    算法实践——数独的基本解法
  • 原文地址:https://www.cnblogs.com/kebibuluan/p/14136437.html
Copyright © 2011-2022 走看看