本节尝试一下Java远程调试的东西,记录一遍简单入门的东西。也就算是使用记录吧!

写一个简单程序打成jar丢到远程服务器运行,模拟远程Server在运行。就拿Java调用shell脚本提交作业程序为例分析。源码如下(如下程序就是一个简单示例代码,不要在乎代码规范):

import java.io.InputStream;public class JavaShell {public static void main(String[] args) throws Exception {try {String grant = "chmod u+x submit-job.sh";Runtime runtime = Runtime.getRuntime();Process grantProc = runtime.exec(grant);int resultCode = grantProc.waitFor();System.out.println(resultCode);grantProc = runtime.exec("./submit-job.sh");resultCode = grantProc.waitFor();System.out.println(resultCode);InputStream in = grantProc.getInputStream();byte[] buffer = new byte[1024];int code;while ((code = in.read(buffer, 0, buffer.length)) != -1) {System.out.print(new String(buffer, 0, code));}/*** 死循环阻止debugger没有连接上之前程序退出(测试suspend参数功能) */System.out.println("shell脚本执行完毕,接下来开始进行定时打印任务!");int i = 0;while (true) {Thread.sleep(2000);System.out.println("这是第" + (++i) + "次循环!");}} catch (Exception e) {System.out.println("this is a excption !");} finally {}}}

打成Jar包提交到远程服务器之后运行:

java  -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=9999,server=y,suspend=y  -jar  JavaShell.jar 

会发现程序阻塞,并等待debugger连接,此时我们可以使用eclipse进行远程调试:

点击debugger即可进行连接,跟踪源码运行:

远程有输出,证明远程程序正在跟踪debugger执行:

到此我们就完成了调试的过程。接下来试一下参数suspend=n的情况:

java  -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=9999,server=y,suspend=n  -jar  JavaShell.jar 

此时会发现远程程序并没有阻塞等待调试器debugger连接,而是程序正常执行:

此时我们可以使用eclipse的远程debugger进行远程调试,但是需要注意:此时我们本地的断点只能打在远程还没有执行的代码处或者正在执行的代码位置,例如我们就可以在死循环中打断点(死循环是一直正在执行的代码):

然后启动debugger之后:

停留在断点处。然后跟着断点位置继续我们的debug工作。到此就应该可以知道suspend参数的作用了:

在JVM DEBUG参数中,有一个参数叫"suspend",它的取值有两个,“y”或者“n”。

如果您刚开始就想调试的话,将参数设置为"suspend=y",这样Eclipse会远程连接Java应用程序。

如果你想先运行项目,然后连接Eclipse,那么可以将参数设置为"suspend=n",这样的话,Java应用程序会正常运行,之后Eclipse会开始远程连接。

更多参数细节:

-XDebug               启用调试。
-Xnoagent             禁用默认sun.tools.debug调试器。
-Djava.compiler=NONE  禁止 JIT 编译器的加载。
-Xrunjdwp             加载JDWP的JPDA参考执行实例。
transport             用于在调试程序和 VM 使用的进程之间通讯。
dt_socket             套接字传输。
dt_shmem              共享内存传输,仅限于 Windows。
server=y/n            VM 是否需要作为调试服务器执行。
address=3999          调试服务器的端口号,客户端用来连接服务器的端口号。
suspend=y/n           是否在调试客户端建立连接之后启动 VM 。

参考:http://calvinliu.iteye.com/blog/876009

转载于:https://www.cnblogs.com/leodaxin/p/7678524.html

Java关于远程调试程序教程相关推荐

  1. Java Media Framework 基础教程

    Java Media Framework 基础教程 作者:Eric Olson     来源:ibm 摘要: 很少发现有关于jmf方面的中文资料,这是在IBM上面找的一本书,可作为jmf的入门学习,业 ...

  2. Java Servlet 和JSP教程(2)

    Java Servlet 和JSP教程(2) 2 安装 2.1 安装Servlet和JSP开发工具 要学习Servlet和JSP开发,首先你必须准备一个符合Java Servlet2.1/2.2和Ja ...

  3. java拷贝远程服务器上文件,java拷贝远程服务器上文件

    java拷贝远程服务器上文件 内容精选 换一换 在Windows模式下,调试功能暂不可用.为支持多交叉架构的调试场景,需要在安装MindStudio的服务器(UI Host)上安装gdb-multia ...

  4. 【笔记】【git】【狂神说Java】Git最新教程通俗易懂 -学习笔记

    前言 学习视频:[狂神说Java]Git最新教程通俗易懂 感谢狂神!!! 此笔记用于记录本人在学习中还有不懂以及值得注意的地方.以方便日后的工作与学习. 笔记中有些个人理解后整理的笔记,可能有所偏差, ...

  5. java作业远程联调_从零入门 Serverless | SAE 的远程调试和云端联调

    作者 | 弈川 阿里巴巴云原生团队 **导读:**本节课程包含三部分内容,前两个部分简单介绍远程调试以及端云联调的原理,最后在 Serverless 应用引擎中进行实际演示. 经过之前课程的学习,相信 ...

  6. java怎么获取服务器文件夹,java获取远程服务器的文件夹

    java获取远程服务器的文件夹 内容精选 换一换 工具中所有涉及上传文件功能的,如果需要上传的文件大于1GB或者解压后超过剩余磁盘空间的一半,则需要释放磁盘空间或手动将文件上传至服务器,其他情况可通过 ...

  7. Java并发编程实战_一线大厂架构师整理:java并发编程实践教程

    并发编程是Java语言的重要特性之一, 在Java平台上提供了许多基本的并发功能来辅助开发多线程应用程序.然而,这些相对底层的并发功能与上层应用程序的并发语义之间并不存在一种简单而直观的映射关系.因此 ...

  8. c++ builder xe2 (Embarcadero rad studio) 远程调试 同样适用于 delphi 远程调试 教程

    c++ builder xe2 (Embarcadero rad studio) 远程调试 同样适用于 delphi 远程调试 教程 转载于:https://www.cnblogs.com/Littl ...

  9. Xmanager远程桌面教程

    Xmanager远程桌面教程 欢迎关注博主,查看更多文章.教程服务端为Ubuntu环境,其他环境如Rhel或者Debian类似. 简介 本教程演示如何通过Xmanager6远程连接服务器并进行远程桌面 ...

最新文章

  1. Java compiler level does not match the version of the installed Java project facet.
  2. 干货丨先搞懂这八大基础概念,再谈机器学习入门
  3. 无法打开物理文件 X.mdf。操作系统错误 5:5(拒绝访问。)
  4. VC 下 64bit 整数的显示和读取格式化字串
  5. 音视频通话:小议音频处理与压缩技术
  6. Java线程死锁–案例研究
  7. MVC3学习 一 ViewBag和Html.Raw
  8. matplotlib.pyplot 中文乱码问题解决
  9. YII2 搭建redis拓展(教程)
  10. 内存中常见异常值的解释(0xcccccccc 0xcdcdcdcd 0xfeeefeee等)
  11. android音效插件,安卓最强音效插件ViPER4Android(V4A)效果器 最新版(FX版)2.0.0.9/(XHiFi版)2.0.0.2_1下载...
  12. 【后端】--process information unavailable解决办法[详细版]
  13. 流量分析——安恒八月月赛CTF
  14. 【社区分享】专注移动端机器学习交流,TensorFlow Lite 中文兴趣小组招募中!
  15. 如何快速搭建一个像“天猫精灵”的智能语音助手?
  16. 【生信分析】一些关于生物信息的常见名字解释
  17. ajax使用post函数(通过远程 HTTP POST 请求载入信息)
  18. linux僵尸进程产生的原因以及如何避免产生僵尸进程
  19. 前后端开发实用网站推荐
  20. STC51单片机学习笔记1——看门狗程序测试

热门文章

  1. 《Android开发艺术探索》自定义View中关于“HorizontalScrollViewEx”的改进
  2. 2017.8.17 开始了我的QT 学习。
  3. c语言知识重温及深入
  4. 损失函数-经验风险最小化-结构风险最小化
  5. pyqt5入门教程(五)
  6. php ci ajax用户登录,使用jQuery和CI显示AJAX调用数据库的数据
  7. linux 简介与安装(虚拟机安装)
  8. 504. Base 7
  9. MYSQL数据库性能调优之六:备份
  10. chardet坑——比蜗牛还慢