当前位置: 首页 > article >正文

IDEA的程序调试笔记

🔴IDEA版本

在这里插入图片描述


🔴调试器作用

逐行执行代码,观察变量状态,定位逻辑错误。

🔴核心组件

断点(Breakpoint)程序暂停执行的标记点。

调试视图(Debug Tool Window)显示调用堆栈、变量、线程等信息。

执行控制按钮继续(Resume)、单步执行(Step Over/Into/Out)等。


🔴设置断点

🐞行断点

点击代码行号左侧区域,出现红色圆点。
右键断点可设置 条件(Condition) 或 日志表达式(Log Message)。
在这里插入图片描述

🐞其他断点类型

方法断点在方法入口/出口暂停。
字段断点监控字段值变化。
异常断点捕获指定异常时暂停。
在这里插入图片描述

Add Conditional Breakpoint. 添加条件断点。

在这里插入图片描述


🔴本地调试

点击工具栏绿色甲虫图标

在这里插入图片描述
或使用快捷键 Shift + F9。
确保已配置正确的 运行/调试配置(Run/Debug Configuration)。

🔴执行控制操作

操作快捷键描述
Resume ProgramF9继续执行到下一个断点
Step OverF8执行当前行,不进入方法内部
Step IntoF7进入当前行的方法内部
Step OutShift+F8执行完当前方法并返回到调用处
Run to CursorAlt+F9执行到光标位置

tips:
Step Over 快速定位问题区域
Step Into 深入可疑方法
Run to Cursor 跳过已验证代码段

🐞恢复执行(Resume Program)

  • 快捷键F9(Windows/Linux) / ⌘ Command + ⌥ Option + R(Mac)
  • 作用从当前断点继续执行直到
    • 遇到下一个断点
    • 程序正常结束
    • 抛出未捕获的异常
  • 典型场景
    // 当需要快速跳过已确认正常的代码段时 
    for(int i=0; i<1000; i++){
        process(i); // 在i=500处恢复执行 
    }
    

🐞单步跳过(Step Over)

  • 快捷键F8 / ⌘ Command + F8
  • 执行逻辑
    当前行
    含方法调用?
    执行整个方法
    执行下条语句
  • 使用技巧
    • 在循环中快速遍历迭代
    • 跳过已验证的第三方库方法

🐞单步进入(Step Into)

  • 快捷键F7 / ⌘ Command + F7
  • 特殊处理
    • System.out.println()等JDK方法默认不进入
    • 强制进入⌥ Alt + F7(可进入任何方法)
  • 示例调试路径
    main() → service.doSomething() → dao.queryData()
    

🐞智能单步进入(Smart Step Into)

  • 快捷键⌥ Alt + Shift + F7
  • 适用场景
    // 当一行代码包含多个方法调用时 
    result = processor.parse(data).validate();
    
    • 弹出选择框让开发者选择进入parse()validate()

🐞单步跳出(Step Out)

  • 快捷键Shift + F8 / ⌘ Command + ⇧ Shift + F8
  • 典型应用
    • 当意外进入不相关的方法时快速返回
    • 确认当前方法剩余部分无需调试时直接跳出

🐞 运行到光标(Run to Cursor)

  • 快捷键Alt + F9 / ⌥ Option + F9
  • 优势
    • 不需要预先设置断点
    • 适用于快速定位循环中的特定迭代
    for(int i=0; i<100; i++){
        // 光标放在此处直接执行到i=99 
    }
    

🔴高级控制技巧

🐞条件断点 + 执行控制

  • 设置条件断点后,配合Step Over进行精准调试
    if(user.getAge() > 18){ // 条件断点user.getName().equals("admin")
        checkPermission();  // Step Into此处 
    }
    

🐞多线程调试

  • 在Threads面板中
    • 右键线程 → Suspend 暂停特定线程
    • 使用Frames面板查看不同线程的调用栈

🐞表达式求值(Evaluate Expression)

  • 快捷键Alt + F8
  • 可在暂停时
    • 修改当前变量值
    • 执行任意合法表达式
    // 示例修改循环变量 
    for(int i=0; i<10; i++){
        System.out.println(i); // 在i=5时修改i=9 
    }
    

版本差异注意

  • 旧版需手动使用⌥ Alt + Shift + F7

🔴变量查看

Variables 面板显示当前作用域内的变量值。

在这里插入图片描述

快速查看鼠标悬停变量上方。
在这里插入图片描述

🔴表达式求值

在 Watches 面板 中添加自定义表达式。

就是下面的面板

调试过程中使用 Alt + F8 打开 Evaluate Expression 窗口。
在这里插入图片描述

🔴常见问题解决方案

问题现象解决方案
快捷键无响应检查与系统快捷键冲突
Step Into不进方法检查是否过滤了库方法(设置→ Debugger → Stepping)
变量值显示<optimized out>关闭JVM的-XX:+AggressiveOpts优化参数

http://www.kler.cn/a/548278.html

相关文章:

  • flutter 状态栏不显示 问题解决办法
  • Rust编程语言入门教程(二)hello_world
  • 开源模型应用落地-Qwen1.5-MoE-A2.7B-Chat与vllm实现推理加速的正确姿势(一)
  • Zookeeper(45) 如何在Zookeeper中删除节点?
  • 网络运维和网络安全哪个前景好?
  • Python数据可视化 - Matplotlib教程
  • Redis可视化连接工具RedisDesktopManager的下载与安装
  • 基于实例详解pytest钩子pytest_generate_tests动态生成测试的全过程
  • 数据结构与算法之排序算法-选择排序
  • dash SQLite 留言本应用技术实现说明
  • 网络安全之笔记--Linux命令
  • 基于Swift实现拼图游戏
  • SOUI基于Zint生成Code11码
  • centos docker ngnix
  • 【kafka系列】Kafka事务的实现原理
  • Python 基于 OpenCV 的人脸识别上课考勤系统(附源码,部署教程)
  • GenMol:基于SAFE分子表示法的分子生成模型(一)
  • 【D2】神经网络初步学习
  • Rander压力测试监测,更改服务端资源node
  • 【Maven】多module项目优雅的实现pom依赖管理