-
程序调试
简介#
-
本篇讲解在
Idea
中如何进行Debug
。
程序调试#
-
什么是程序
Debug
?-
Debug
是程序开发人员必备的调试程序技能。 -
在企业中程序开发和程序调试的比例为
1:1.5
,是必须要掌握的技能。
-
-
Debug
的作用?- 追踪代码的运行流畅;
- 程序运行异常定位;
- 线上问题追踪。
调试步骤#
-
设置断点,快捷键
F9
; -
调试程序,共
8
个按钮:
按钮 | 描述 |
---|---|
Show Excution Point :如果当前你不在调试所在的行,此按钮可以快速定位到调试行上。 |
|
Step Over :跳过当前调试行,不会进入当前行中的方法体内。 |
|
Step Into :步入。如果当前行有非官方类库的方法,则可以进入方法内部。官方类库不包括第三方依赖。 |
|
Force Step Into :强制步入,能进入任何方法。查看底层源码时,可以使用这个进入官方类库的方法。 |
|
Step Out :步出,从步入的方法内退出到方法调用处,此时方法已执行完毕,但还没有完成赋值。 |
|
Drop Frame :回退断点。回退到对象创建或方法调用行。 |
|
Run to Cursor :运行到光标处,你可以将光标定位到你需要查看的那一行,然后使用这个功能,代码会运行至光标行,此时不需要设置断点。 |
|
Evaluate Expression... :计算表达式。 |
-
观察变量。查看变量有三种方式:
-
Debugger
的Variables
中查看变量; - 鼠标悬停到变量上会弹出当前变量信息;
- 程序区查看变量。
-
1. 跳转到当前代码执行#
-
Show Excution Point
:跳转到当前代码执行的行,快捷键Alt + F10
。
- 作用:使程序快速从其他窗口切换到当前调试程序所在行。
2. 步过调试#
-
Step Over
:步过调试,快捷键F8
。
- 作用:使代码一行一行地顺序执行,不会进入方法。
3. 步入调试#
-
Step Into
:步入调试,快捷键F7
。
-
作用:当前如果调试行使用
new
关键字进行自定义类或第三方类的对象创建,当使用这些对象引用的自定义方法时,步入调试会进入该方法中。但步入不会进入JDK
的类或其对象引用调用的方法中。
4. 强制步入调试#
-
Force Step Into
:强制步入调试,快捷键Alt + Shift + F7
。
-
作用:和普通步入调试的区别是,强制步入调试会进入
JDK
的类或其对象引用调用的方法中。
5. 步出调试#
-
Step Out
:步出调试,快捷键Shift + F8
- 作用:可以从类或方法中退出到当前调试行处。
6. 回退断点#
-
Drop Frame
:回退断点,无快捷键。
- 作用:回退到对象创建或方法调用行。当你进入了方法体时,此时想查看方法实际接收的参数来自哪里,使用回退断点就可以回到上一步。
7. 运行到光标处#
-
Run to Cursor
:运行到光标处,快捷键Alt + F9
。
-
作用:使
Debugger
程序运行到光标处,等同于一个自由的断点。
8. 计算表达式#
-
Evaluate Expression
:计算表达式,快捷键Alt + F8
。
- 作用:使用计算表达式可以更改变量的值。
条件断点#
- 在遇到诸如循环多次时,你可能只需要查看中间某个条件的执行结果,这个时候可以使用条件断点。
- 程序将运行到符合条件时停下,意味着可以从设定点开始调试。
多线程调试#
-
多线程调试,需要调整断点挂起级别为
Thread
,然后在Frames
中选择线程进行调试即可。
- 此时所在调试的线程是红色勾标记,而处于等待调试的线程则是红色圆点标记。
-
选择
Thread-0
并运行调试至happen()
方法结束,则只有该线程会输出,其他的线程则仍会处于等待调试状态:
- 如果当前线程完全结束,则会自动切换到另一个线程的调试中:
总结#
- 关于调试的主要功能到此结束,多进行应用能更好地理解调试的意义所在。
来源:https://www.cnblogs.com/phax2/p/14224000.html
最新更新
python爬虫及其可视化
使用python爬取豆瓣电影短评评论内容
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比