从代码角度,带你手把手调试(上)

简介: 从代码角度,带你手把手调试(上)

1.调试的快捷键


技巧:
ctrl+H:替换
ctrl+F:查找
Ctrl+上下箭头键: 滚动代码屏幕,但不移动光标位置。
Ctrl+Shift+/ 块注释代码(按两次取消)
Ctrl+K+C 注释代码
Ctrl+K+U 取消注释代码
Ctrl+G 跳转到指定行
F5: 启动调试
Ctrl+F5: 开始执行(不调试)
Shift+F5: 停止调试
Ctrl+Shift+F5: 重启调试
F9: 切换断点
Ctrl+F9: 启用/停止断点
Ctrl+Shift+F9: 删除全部断点
F10: 逐过程
Ctrl+F10: 运行到光标处
F11: 逐语句
复制代码


2.调试的基本步骤

image.png



3.Debug版本和Release版本

Debug版本:调试版本 -可以调试

Release版本: 发布版本-供用户使用的,不能调试




问:测试员测试的是什么版本?

->测试员测试的是release版本,站在用户的角度




4.F9设置断点,F5跳到断点处,先按F9设置断  点然后按F5跳到断点处

若有多个断点,按F5跳到下一个断点  这样可以跳过不需要调试的代码




5.设置条件断点

首先需要设置断点(F9),右键断点

image.png

当满足某个条件才触发断点



打多个断点时:先执行第一个断点内的内容,再执行下一个断点

若想从一个位置跳到另一个位置  ---- 先打一个断点 ->跳到该位置后,去掉断点,再打另一个



6.一个有问题的代码

int main()
{
  int i = 0;
  int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
  for (i = 0; i <=12; i++)
  {
    arr[i] = 0;
    printf("hehe\n");
  }
  return 0;
}
复制代码


执行结果:死循环打印hehe


为了发现问题:打印第几次打印


int main()
{
  int i = 0;
  int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
  for (i = 0; i <=12; i++)
  {
    arr[i] = 0;
    printf("hehe\n");
    printf("第%d次打印\n",i);
  }
  return 0;
}
复制代码

image.pngi不能变为12


调试结果:

image.png将第数组元素下标为12的值也改成0时,i也恢复为0,所以造成了死循环


相关文章
|
存储 机器学习/深度学习 编译器
超详细的数据结构---顺序表的有关教程
超详细的数据结构---顺序表的有关教程
271 0
|
27天前
|
人工智能 前端开发 IDE
AI 原生研发范式:从“代码中心”到“文档驱动”的演进
本文讲述在 AI 编程时代,通过 SDD解决上下文腐烂、审查瘫痪、维护断层三大工程失序问题,并提供一套轻量、可落地的人机协作 SOP。
AI 原生研发范式:从“代码中心”到“文档驱动”的演进
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
AI编码实践:从Vibe Coding到SDD
本文系统回顾了淘特导购团队在AI编码实践中的演进历程,从初期的代码智能补全到Agent Coding再到引入Rules约束,最终探索SDD(Specification Driven Development,规格驱动开发)——以自然语言规格(spec.md)为唯一真理源,驱动代码、测试、文档自动生成,实现设计先行、可测试性内建与文档永不过期。实践中发现SDD理念先进但落地门槛高、工具链不成熟、历史代码集成难,因此团队当前采用融合策略:以轻量级技术方案模板为输入 + Rules严格约束 + Agent Coding高效实现 + AI自动汇总架构文档,形成兼顾规范性、效率与可维护性的AI辅助编程最佳
|
3月前
|
安全 固态存储 Java
通用权限管理模型详解:从 ACL 到 RBAC0/1/2/3
本文深入解析ACL与RBAC两种主流权限模型,重点剖析RBAC的四个层级(RBAC0-RBAC3),涵盖角色继承、职责分离等核心机制,并结合实际场景给出选型建议,助你构建安全、可维护的权限体系。
|
开发框架 监控 .NET
【学习笔记】Verilog之三:行为建模方法
Verilog是一种硬件描述语言,用于模拟电子系统的结构和行为。行为建模是Verilog的一种方法,分为数据流行为建模和顺序行为建模。 数据流行为建模主要使用`assign`语句,它描述了电路的功能而不涉及具体结构。连续赋值语句(`assign`)用于给线网分配值,当右端表达式发生变化时,新值会立即赋给线网。此外,还有时延的概念,可以指定赋值或事件发生的延迟时间。
|
开发工具 git 开发者
git rebase的使用
通过这些思维导图和分析说明表,您可以更直观地理解Git rebase的概念、用法和应用场景。希望本文能帮助您更高效地使用Git rebase,提高代码管理的效率和质量。
2681 13
|
存储 缓存 NoSQL
【Java面试题汇总】Redis篇(2023版)
Redis的数据类型、zset底层实现、持久化策略、分布式锁、缓存穿透、击穿、雪崩的区别、双写一致性、主从同步机制、单线程架构、高可用、缓存淘汰策略、Redis事务是否满足ACID、如何排查Redis中的慢查询
【Java面试题汇总】Redis篇(2023版)
|
SQL 分布式计算 关系型数据库
Clickhouse时间日期函数一文详解+代码展示
Clickhouse时间日期函数一文详解+代码展示
4386 0
Clickhouse时间日期函数一文详解+代码展示
|
存储 分布式计算 算法
|
编解码 前端开发
【Vue3】解决电脑分辨率125%、150%及缩放导致页面变形的问题
【Vue3】解决电脑分辨率125%、150%及缩放导致页面变形的问题
2340 0