查看调用堆栈(调用堆栈)
通过调用堆栈,可以清晰地反应函数的调用关系以及当前调用所处的位置。
查看汇编信息
在调试开始之后,有两种方式转到汇编。
1. 第一种方式:右击鼠标,选择【转到反汇编】;
2. 第二种方式:
查看寄存器信息
可以查看当前运行环境的寄存器的使用信息。
查看寄存器信息
可以查看当前运行环境的寄存器的使用信息。
- 初学者:80%时间写代码,20%时间在调试;
- 程序员:20%时间写代码,80%时间在调试;
- 现在学的都是一些简单的调试,以后可能会有很复杂的调试场景:多线程程序的调试等;
- 多多使用快捷键,提升效率。
4. 一些调试的实例
(1). 实例一:实现代码:求 1!+2!+3! ...+ n! ;不考虑溢出
(需调试的问题代码:)
#include <stdio.h> //求 1!+2!+3! ...+ n! ; int main() { int i = 0; int sum = 0; //保存最终结果 int n = 0; int ret = 1; //保存n的阶乘 //输入 scanf("%d", &n); for (i = 1; i <= n; i++) { int j = 0; for (j = 1; j <= i; j++) { ret *= j; } sum += ret; } printf("%d\n", sum); return 0; }
调试思路:
1. 首先推测问题出现的原因,初步确定问题可能的原因。
2. 实际上手调试很有必要
3. 根据第1点,调试时心里有数(下一步应该是什么样的)
(2). 实例二:死循环
#include <stdio.h> 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; }
死循环原因:i 和 arr[12] 地址相同,
地址会相同的原因:
( 数组越界 可能就会出现这种问题)