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,这样我们就远程调试了
    •  

       

posted on 2020-12-14 23:57  luzhouxiaoshuai  阅读(1731)  评论(0编辑  收藏  举报

导航