使用JDB指令模拟Eclipse调试java程序.
来源:互联网 发布:打电话变声软件男变女 编辑:程序博客网 时间:2024/06/06 17:24
使用JDB指令模拟Eclipse调试java程序.
最近一段时间在研究JVM虚拟机, 大致明白了其运作过程。研究完毕后, 向上走, 便在想是如何实现程序调试功能的,刚好查看到JDB工具.
JDB(Java Debugger), 主要用来协助使用者查找并修复Java程序中的bug, 使用者可以通过它来设置程序断点, 单步, 启动, 停止, 查看变量值.
操作过程
本文用到的程序:
// Robot.java// jony deng// den.mingxing@163.com// 2017/06/28import java.util.Scanner;public class Robot{ // 大笑. public native void Laugh(); // 改变背景. public native void WallPaper(); // 打印文字. public native void Hello(); // 语音识别. public native void Listen(); int mMemCnt = 0; static { System.loadLibrary("Robot"); } public static void main(String[] args) { Robot rbt = new Robot(); Scanner sc = new Scanner(System.in); int cmdCnt = 0; while(true) { cmdCnt++; rbt.mMemCnt++; System.out.println(""); System.out.println("Please select your opperations:(" + Integer.toString(cmdCnt) + ")"); System.out.println("========================================="); System.out.println("H/h: Hello world."); System.out.println("L/l: Listen."); System.out.println("S/s: Speak."); System.out.println("W/w: Change the wallpaper."); System.out.println("E/e: Exit demo."); String text = sc.nextLine(); if(text.equals("S") || text.equals("s")) { System.out.println("Speak..."); rbt.Laugh(); } else if(text.equals("W") || text.equals("w")) { System.out.println("Change the wallpaper..."); rbt.WallPaper(); } else if(text.equals("H") || text.equals("h")) { rbt.Hello(); } else if(text.equals("E") || text.equals("e")) { System.out.println("App exit"); break; } else if(text.equals("L") || text.equals("l")) { rbt.Listen(); } else { System.out.println("***" + text + "***"); } System.out.println(""); } }}
- 1.编译程序
- javac -g Robot.java
注意编译的时候,一定要指定”-g”选项。在class文件中生成所有调试信息, 后续查看变量数据时, 需要用到这些调试信息. - 2.启动jdb
- jdb
- 使用此指令后, 将进入到启动jdb.
- 3.设定断点
- stop at Robot:30
在文件的第30行设置断点, 指令原型是: stop at class_id:line_num, 表示在某一行设置断点. 结果如下: - 4.启动程序
- run Robot
启动Robot类. 结果如下: - 5.查看某个函数类的局部变量
- locals
查看局部变量的值, 从下图可知本地变量有rbt, sc. 此时还没有显示cmdCnt的数值. 当运行到36行后, 便显示了cmdCnt的值了.
- 5.单独查看某个成员变量的数值.
- print rbt.mMemCnt
查看rbt实例的成员变量的值, 如果要查看某个Class的静态成员变量, 也是使用此指令. - 6.单独查看某个局部变量或.
- print cmdCnt
查看局部变量cmdCnt的值. - 其他指令, 请读者参考help内的指令集. 基本上可以根据jdb实现
- 1). 打断点、清除断点.
- 2). step into, step over, step out.
- 3). 查看和修改类成员变量、局部变量的值.
- 4). 终止线程.
阅读全文
1 0
- 使用JDB指令模拟Eclipse调试java程序.
- 使用JDB调试Java程序
- 使用JDB调试Java程序
- 使用JDB调试Java程序
- java jdb 命令行调试程序
- 用jDB 调试Java程序
- 如何使用jdb调试android的java程序
- 命令行启动java程序 与 jdb 调试
- 利用JDB附加调试JAVA程序
- 利用JDB附加调试JAVA程序
- Java程序调试工具——jdb
- 使用jdb调试android Java层
- jdb调试程序
- 使用JDB-debug调试
- jdb 调试java
- java调试命令jdb
- java 文字模式调试器jdb使用总结
- 使用jdb和gdb同时调试java native code
- protobuf入门教程(二):消息类型
- 1.2 字符串包含
- YUV420P像素数据编码为JPEG图片
- 将本地jar包加入maven管理
- ceph Luminous dashboard初探
- 使用JDB指令模拟Eclipse调试java程序.
- Android常用开源项目(三十六)
- JIRA REST API(一)
- 数据结构——课程设计之~安排教学计划
- 【Python学习系列十九】基于scikit-learn库进行特征选择
- request.getContextPath() 基础
- 07_Qt的三大窗口dialog、widget、mainwindow
- Tomcat安装
- C-COT 【目标跟踪】论文解读