使用JDB调试程序

JDB是JDK自带的基于命令行的调试程序。我们先来man一下吧(说到这里,我之前在翻娄老师的博客的时候看到一篇文章:做中学之提升英语口语很真实,虽然我六级不好不坏589,但是口语只有C+。平时看文档虽然认真看能看懂,但是还是喜欢偷懒去网上翻译。看来要走的路还很多,可能选走更困难一点的路是更正确的选择吧,这个话题以后再说)

jdb(1)                                           Basic Tools                                          jdb(1)

NAME
jdb - Finds and fixes bugs in Java platform programs. SYNOPSIS
jdb [options] [classname] [arguments] BASIC JDB COMMANDS
The following is a list of the basic jdb commands. The JDB supports other commands that you can list with the -help option. help or ?
The help or ? commands display the list of recognized commands with a brief description.
不会就help咯 run After you start JDB and set breakpoints, you can use the run command to execute the debugged application. The run command is available only when the jdb command starts the debugged application as opposed to attaching to an existing JVM.
在你启动JDB并且设置断电以后,你可以使用run命令去执行被调试程序。run命令只有在jdb命令启动被调试程序以后才 可以使用,而不是附加到现存的JVM上 cont Continues execution of the debugged application after a breakpoint, exception, or step.
在断点、exception、step后继续执行被调试程序 print Displays Java objects and primitive values. For variables or fields of primitive types, the actual value is printed. For objects, a short description is printed. See the dump command to find out how to get more information about an object.
显示Java对象和原始值。打印原始类型的变量或者字段。打印对象的简短描述。查看dump命令以了解如何获取更多的对象信息 dump For primitive values, the dump command is identical to the print command. For objects, the dump command prints the current value of each field defined in the object. Static and instance fields are included. The dump command supports the same set of expressions as the print command.
对于基本类型,dump命令和print命令一样。对于对象,dump命令打印对象里定义的每一个字段的当前值。静态和实例字段包括在内。dump命令支持和print命令一样的表达式 threads
List the threads that are currently running. For each thread, its name and current status are printed and an index that can be used in other commands.
列出现在正在运行的线程。打印每个线程的名字、当前状态和能在其他命令里使用的索引 In this example, the thread index is 4, the thread is an instance of java.lang.Thread, the thread name is main, and it is currently running. 4. (java.lang.Thread)0x1 main running thread Select a thread to be the current thread. Many jdb commands are based on the setting of the current thread. The thread is specified with the thread index described in the threads command.
选择一个线程作为当前线程。许多jdb命令基于当前线程的设定。线程由在threads命令里给的索引来指定 where The where command with no arguments dumps the stack of the current thread. The whereall command dumps the stack of all threads in the current thread group. The wherethreadindex command dumps the stack of the specified thread.
没有参数的where命令转储当前线程的堆栈。 If the current thread is suspended either through an event such as a breakpoint or through the suspend command, then local variables and fields can be displayed with the print and dump commands. The up and down commands select which stack frame is the current stack frame.
如果当前线程被中止,例如断点或者suspend命令,那么本地变量和字段可以被print和dump命令显示。up和down命令选择哪个堆栈帧是当前堆栈帧 BREAKPOINTS
Breakpoints can be set in JDB at line numbers or at the first instruction of a method, for example:
断点可以在JDB中按行号或者方法里的第一个指令设置 · The command stop at MyClass:22 sets a breakpoint at the first instruction for line 22 of the source
file containing MyClass. · The command stop in java.lang.String.length sets a breakpoint at the beginning of the method
java.lang.String.length. · The command stop in MyClass.<clinit> uses <clinit> to identify the static initialization code for
MyClass.

接下来就来试试吧。先打开三个标签页方便调试



按理来说现在是可以用Alt+数字来切换标签页,这样会很方便,但是不知道为什么,我的ubuntu在按Alt+1的时候切换不了,而是会出现(arg:1),希望有大神能告诉我怎么办。然后我们用jdb开始调试,用stop in 来设置断点,run运行到断点初停下,用locals来查看变量,step单步执行。要注意stepnext都是下一步,但是step会进入方法体,next不会



使用list可以查看代码运行到哪里



stop at在行号处设置断点,clear打印设置的断点

更新:我知道为什么alt+数字没法切换标签页了,因为我根本就不是打开了三个标签页,而是打开了三个窗口。Ctrl+Alt+T是新建终端窗口,Ctrl+Shift+T是新建标签页!

系统文件被覆盖的挽救

在运行statistics.sh代码的时候,我一开始有点蒙,不知道要把这个脚本放到哪个文件夹下面去,然后做出了一个巨蠢无比的事

我不知道当时是怎么想的,想把脚本放到/bin目录下,结果不行,我居然还用管理员权限强行执行了命令,结果就是,不仅脚本运行不了,好像系统也出了点问题

虽然感觉没有什么大影响,但是指不定哪天就出问题了呢。。。。不行,我得修好啊。所以问题出在哪了呢?我首先要搞懂我刚刚干了什么

/bin/sh是一个链接文件,看看里面是什么

诶,这不是statistics.sh里的内容吗,也就是说,我强行把系统文件的内容覆盖了?!那要修复的话,只要把文件改回来就行了,好想要一个撤销键啊。。。我一开始想去网上百度一下有没有这个文件的内容直接复制进去算了,但是好像没有。那就只能从别的同学那里拷了。。。。等等!我突然想起来我

之前为了保险起见,用过VMware的快照功能,那我可以先拍下现在的快照,然后回到之前的快照,把完好的sh文件拷到共享文件夹,再回到现在的快照把sh文件改回来

回到过去,看看sh到底是什么玩意

。。。。。。。不管了,就是他了,拷到共享文件夹,再回到现在,改回来,看看行不行

搞定!

以后还是要小心一点,不要玩坏了虚拟机,而且要养成及时备份的习惯。

初学者的一点学习经过,如有错误或可以改进的地方,请不吝赐教!

更新:使用jdb调试时遇到输入类的处理方法

参考资料

《Java程序设计》第一周学习记录(2)的更多相关文章

  1. 201521044152<java程序设计>第一周学习总结

    本周学习总结 java开发时间虽然很短,但是发展迅速,已成为现在非常流行的一门语言,很开心能有幸学习java.第一周学习了java的平台,运行环境jdk以及jrt等等新名词,还了解了eclipse的基 ...

  2. 201621123007 Java程序设计第一周 学习总结

    第一周-Java基本概念 201621123007 <Java程序设计> 第一周学习总结 1. 本周学习总结 java是面向对象的一类语言,三大特征:封装性,继承性,多态性. jdk jr ...

  3. 20145304 刘钦令 Java程序设计第一周学习总结

    20145304<Java程序设计>第1周学习总结 教材学习内容总结 1995年5月23日,是公认的Java的诞生日,Java正式由Oak改名为Java. Java的三大平台是:Java ...

  4. 201871010106-丁宣元 《面向对象程序设计(java)》第一周学习总结

    丁宣元 <面向对象程序设计(java)>第一周学习总结 正文开头 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在 ...

  5. 扎西平措 201571030332《面向对象程序设计 Java 》第一周学习总结

    <面向对象程序设计(java)>第一周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 ...

  6. 201871010135 张玉晶 《面向对象程序设计(java)》 第一周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/wyt0455820/ ...

  7. 杨其菊201771010134《面向对象程序设计(java)》第一周学习总结

    第一部分:课程准备部分 填写课程学习 平台注册账号, 平台名称 注册账号 博客园:www.cnblogs.com 安迪儿 程序设计评测:https://pintia.cn/ 迷路的麋鹿回不来家了 代码 ...

  8. 201871010124 王生涛《面向对象程序设计JAVA》第一周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://edu.cnblogs.com/campus/xbsf/ ...

  9. 201871010126 王亚涛 《面向对象程序设计(java)》 第一周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/wyt0455820/ ...

  10. 201871010132-张潇潇《面向对象程序设计(java)》第一周学习总结

    面向对象程序设计(Java) 博文正文开头 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cn ...

随机推荐

  1. python中的str和repr函数的区别

    看了一些网上的解释,最主流的解释是“str是给人看的,repr是给机器看的”,如果已经理解了的,这句话是对的,但是是有问题的,对于没懂的,这句话是无法理解的. 我来尝试解释一下.先直译一下官方文档: ...

  2. [No000013D].Net 项目代码风格参考

    1. C#代码风格要求 1.1 注释 类型.属性.事件.方法.方法参数,根据需要添加注释. 如果类型.属性.事件.方法.方法参数的名称已经是自解释了,不需要加注释:否则需要添加注释. 当添加注释时,添 ...

  3. 【每日一题】 UVA - 340 阅读理解+模拟

    https://cn.vjudge.net/problem/UVA-340 题目很难读,差不多读了两天 意思是给你一个n个数的数列,然后有m个询问,每个询问也是一个n个数的数列,让你输出两个数:一个是 ...

  4. 部署Java项目到阿里云服务器主机

    https://m.aliyun.com/jiaocheng/548684.html https://blog.csdn.net/qq_30865575/article/details/7827329 ...

  5. php之变量和常量

    PHP中的变量用一个美元符号后面跟变量来表示.变量名是区分大小写的. 变量与PHP中其它的标签一样遵循相同的规则.一个有效的变量名有字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线. 按照 ...

  6. 2016年蓝桥杯省赛A组c++第1题

    /* 某君新认识一网友. 当问及年龄时,他的网友说: “我的年龄是个2位数,我比儿子大27岁, 如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄” 请你计算:网友的年龄一共有多少种可能情况? 提 ...

  7. [GRE] GRE协议介绍

    写的一般,主要看下图就行了. https://blog.csdn.net/Mary19920410/article/details/72303641 前半部分介绍还不错,后半部分没看. http:// ...

  8. 转:JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法、shiro认证与shiro授权

    原文地址:JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法.shiro认证与shiro授权 以下是部分内容,具体见原文. shiro介绍 什么是shiro shiro是Apache ...

  9. python 随机模块常用命令

    import randomprint(random.random()) #用于生成一个0到1之间的随机浮点数print(random.uniform(1,3))# 用于生成一个指定范围内的随机浮点数p ...

  10. 用canvas把页面中所有元素的轮廓绘制出来

    function plot(){//绘制函数 // 创建一个canvas画布 const canvas=document.createElement("canvas"); canv ...