• Java远程断点调式 -Xdebug


    前言:

      我们在开发的过程中,难免会遇到调用别人机器上的代码,或者测试服务器上的代码。再调用过程中,难免会用到断点调式的功能。但是运行的不是本地的代码怎么办呢?

    现在我们就来了解下Java远程断点调用。

    需要:

      本地必须有源码,才能进行远程断点。

    一. 服务端启动

    #jdk1.7版本之前的命令

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

    #1.7版本之后的命令

      #1) java -agentlib:jdwp=transport=dt_socket,address=9092,server=y,suspend=y -jar xxx.jar
      #2) java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=9092-jar xxx.jar

    我本地是jdk1.8,所以:

    # nohup 末尾加&是后台运行 后边是日志输出路径

    nohup java -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,address=9092,suspend=y -jar xxx.jar 1>/home/project/applogs/xxx-standout.log 2>&1 &

    参数说明:

      # -Xdebug:通知JVM工作在debug模式下;
      # -Xnoagent 禁用默认sun.tools.debug调试器。
      # -Djava.compiler=NONE 禁止 JIT 编译器的加载。
      # -Xrunjdwp:通知JVM使用(java debug wire protocol)来运行调试环境;加载JDWP的JPDA参考执行实例
      # transport:监听Socket端口连接方式(也可以dt_shmem共享内存方式,但限于windows机器,并且服务提供端和调试端只能位于同一台机);
      # server:server=y表示当前是调试服务端,=n表示当前是调试客户端
      # suspend:suspend=n表示启动时不中断,一般用于设置主动连接;suspend=y表示启动时就进入调试模式,一般用于被动连接;

    二. 客户端调用

    用idea连接远程代码

    1.

    2.

     

     3.

     

     4.启动remote,当 console 窗口中打印出 “Connected to the target VM, address: 127.0.0.1:9092', transport: 'socket'”即表示链接成功

    然后就可以访问页面,再本地代码打断点了

    注意:

      1.服务端启动的时候,address=prot 这个端口号和程序端口,不是一样的。address这个端口号,必须要是没有在使用的。

      2.服务端,不但要开放程序端口,而且要开放address端口。刚开始的时候,可以把防火墙关了练习。

      3.客户端,调用的时候,调用的不是程序端口,而是address端口。

  • 相关阅读:
    【thinkphp】ThinkPHP各个低版本(<=3.2)完全配置参考手册
    HTTP头的Expires与Cache-control
    HTTP头的Expires与Cache-control
    setContentType、setCharacterEncoding、pageEncoding和contentType
    setContentType、setCharacterEncoding、pageEncoding和contentType
    字符集和字符编码(Charset & Encoding)
    字符集和字符编码(Charset & Encoding)
    java中IO类的各种操作
    文章标题
    printf()输出
  • 原文地址:https://www.cnblogs.com/zbzdqsmh/p/13959050.html
Copyright © 2020-2023  润新知