JDB的使用.doc_第1页
JDB的使用.doc_第2页
JDB的使用.doc_第3页
JDB的使用.doc_第4页
JDB的使用.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JDB是基于文本和命令行的调试工具(例如Sun JDB);虽然现在有一些很好的调试工具,然而 Java 调试器 (JDB) 提供了一些优点。最重要的是 JDB 可以免费获取并且是平台独立的。其缺点是它只有命令行格式,一些开发人员认为这很原始,而且难以使用。一些 IDE 已经将 GUI 界面构建到 JDB 调试 API(如 Jikes)。JDB 是 JDK 安装的一部分。1. *命令列表*2. connectors-列出此VM中可用的连接器和传送器3. 4. run类参数-开始执行应用程序的主类5. 6. threads线程组-列出线程7. thread-设置默认线程8. suspend线程ID-暂停线程(默认为所有线程)9. resume线程ID-恢复线程(默认为所有线程)10. 其中|all-转储线程的堆栈11. 其中|all-转储线程的堆栈,以及pc信息12. upn帧-向上移动线程的堆栈13. downn帧-向下移动线程的堆栈14. kill-中止具有给定的异常对象的线程15. interrupt-中断线程16. 17. print-输出表达式的值18. dump-输出所有对象信息19. eval-输出表达式的值(与print相同)20. set=-为字段/变量/数组元素指定新值21. locals-输出当前堆栈帧中的所有局部变量22. 23. classes-列出当前已知的类24. class-显示已命名的类的详细信息25. methods-列出类的方法26. fields-列出类的字段27. 28. threadgroups-列出线程组29. threadgroup-设置当前线程组30. 31. stopin.(参数类型,.)32. -在方法中设置断点33. stopat:-在行中设置断点34. clear.(参数类型,.)35. -清除方法中的断点36. clear:-清除行中的断点37. clear-列出断点38. catchuncaught|caught|all|39. -出现指定的异常时中断40. ignoreuncaught|caught|all|41. -对于指定的异常,取消catch42. watchaccess|all.43. -监视对字段的访问/修改44. unwatchaccess|all.45. -停止监视对字段的访问/修改46. tracemethods线程-跟踪方法输入和退出47. untracemethods线程-停止跟踪方法输入和退出48. step-执行当前行49. stepup-执行到当前方法返回到其调用程序50. stepi-执行当前指令51. next-跳过一行(跨过调用)52. cont-从断点处继续执行53. 54. listlinenumber|method-输出源代码55. use(或sourcepath)源文件路径56. -显示或更改源路径57. exclude,.|“无”58. -对于指定的类,不报告步骤或方法事件59. classpath-从目标VM输出类路径信息60. 61. monitor-每次程序停止时执行命令62. monitor-列出监视器63. unmonitor-删除监视器64. read-读取并执行命令文件65. 66. lock-输出对象的锁信息67. threadlocks线程ID-输出线程的锁信息68. 69. pop-弹出整个堆栈,且包含当前帧70. reenter-与pop相同,但重新输入当前帧71. redefine72. -重新定义类的代码73. 74. disablegc-禁止对象的垃圾收集75. enablegc-允许对象的垃圾收集76. 77. !-重复执行最后一个命令78. -将命令重复执行n次79. help(或?)-列出命令80. version-输出版本信息81. exit(或quit)-退出调试器82. 83. :带有软件包限定符的完整类名84. :带有前导或后缀通配符(*)的类名85. :threads命令中报告的线程号86. :Java(TM)编程语言表达式。87. 支持大多数常见语法。88. 89. 可以将启动命令置于jdb.ini或.jdbrc之中90. (两者位于user.home或user.dir中) 实例:packagejvm.init;public class Example public static void main(String args) int a = 2; int b = 3; if (args.length jdb-classpathbinjvm.init.Example52. 正在初始化jdb.3. stopatjvm.init.Example5:74. 正在延迟断点jvm.init.Example5:7。5. 将在装入类之后对其进行设置。6. run7. 运行jvm.init.Example58. 设置未捕捉到java.lang.Throwable9. 设置延迟的未捕捉到java.lang.Throwable10. 11. VM已启动:设置延迟的断点jvm.init.Example5:712. 13. 断点命中:thread=main,jvm.init.Example5.main(),line=7bci=414. 15. main1locals16. 方法参数:17. args=instanceofjava.lang.String0(id=323)18. 局部变量:19. a=220. b=321. main1next22. 23. 已完成步骤:thread=main,jvm.init.Example5.main(),line=8bci=1024. 25. main1首先我们写一个最简单的小程序,但是它包含了一些最基本的面向对象要素。 class testint a;int b;test(int aa,int bb)a = aa;b = bb;int add()return a+b;public class hehepublic static void main(String args)int a = 2;int b = 3;int c= a+b;System.out.println(c); test kk=new test(1,2);System.out.println(kk.add();存为hehe.java后,用javac -g hehe.java进行编译。用参数g是为了产生各种调试信息,不用就无法调试。如果这里遇到问题,请参考Helloworld攻略。上面的程序是可以通过的,可以直接用java hehe运行。下面结合该例子谈谈JDB的使用。 首先键入jdb hehe 如果出现下面信息,说明系统没有找到调试的类。此时可以用java -classpath . hehe命令解决。 C:javasource jdb heheInitializing jdb.hehe not found如果出现一下信息,说明开始进行调试,一切正常。如果是调试Applet,则用 appletviewer -debug hehe.html命令进行调试 C:javasource jdb -classpath . heheInitializing jdb.0xb0:class(hehe)回想VC中的调试,应该是设置断点,然后再进行跟踪。Java中也是一样。用stop命令进行断点设置。然后用 run 命令开始调试,运行程序到断点,这里断点是设置在 main 主函数中。 stop at hehe:18Breakpoint set at hehe:18 runrun heherunning .main1Breakpoint hit: hehe.main (hehe:18)main1此时可以用locals命令查看变量,用step命令进入下一条命令,也可以用单独一个stop命令来查看断点的设置情况。注意此时b还没有被赋值。 main1 localsMethod arguments:Local variables: args = a = 2main1 stepmain1Breakpoint hit: hehe.main (hehe:19)main1当运行到System.out.println()函数时,会出现一下提示: main1 stepmain1Breakpoint hit: java.lang.ClassLoader.loadClass (ClassLoader:247)这个是因为我们跟踪进去了println方法,我们一般没有必要这样做,此时可以用next跳过该方法进入到下一条一句。step的含义是进入函数跟踪,next是转入下一条语句执行。我们随时可以键入 locals 和 list 命令来查看变量值和当前运行的代码。下面箭头指到地方即为当前程序运行到的地方。 main1 nextmain1Breakpoint hit: hehe.main (hehe:20)main1 list16 17 int a = 2;18 int b = 3;19 int c= a+b;20 = System.out.println(c);21 test kk=new test(1,2);22 System.out.println(kk.add();2324 main1接下来的问题自然是如何查看对象。当程序运行到new命令处时,键入locals,可以看到 main1 stepmain1Breakpoint hit: test. (test:5)main1 list1 class test2 3 int a;4 int b;5 = test(int aa,int bb)6 7 a = aa;8 b = bb;9 main1 localsMethod arguments:Local variables: this = test64fd6722 aa = 1 bb = 2main1可以看到此时显示的变量值是类test中构造函数中的变量值。this对象即为当前构造的对象。可以用dump命令进行查看。 main1 dump thisthis = (test)0x11a int b = 0 int a = 0也可以在main函数中用dump kk和print命令命令进行对象查看 main1 dump kkkk = (test)0x11a int b = 2 int a = 1main1 print kkkk = test64fd6722main1 print kk.akk.a = 1main1 print kk.bkk.b = 2最后键入cont命令,如果没有其他断点,程序就直接运行完毕退出。调试结束。 main1 cont3 Current thread main died. Execution continuing.hehe exited上述操作中的断点都是设置在main函数中的,如果要设置在调用的类方法中,则要用 stop in yourclassname.functionname 命令来进行设置,比如说: stop in test.addBreakpoint set in test.add runrun heherunning .main1 5Breakpoint hit: test.add (test:11)main1 list7 a = aa;8 b = bb;9 10 int add()11 = return

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论