(三十二)单步调试技术

  • 时间:2018-11-09 22:53 作者:RGiskard 来源:RGiskard 阅读:171
  • 扫一扫,手机访问
摘要:编译错误与运行错误编译错误:编译器提醒的错误,低级错误,语法有错,根本无法生成exe文件运行错误:程序运行的结果与预期不一致,说明程序不对,存在bug,需要修改一般情况下,能复现的错误都是可以处理的单步调试单步调试就是在要调试的代码段首行加断点,走一步看一下结果,边走边观察,直到发现有哪一步走错了在

编译错误与运行错误

  • 编译错误:编译器提醒的错误,低级错误,语法有错,根本无法生成exe文件

  • 运行错误:程序运行的结果与预期不一致,说明程序不对,存在bug,需要修改

    一般情况下,能复现的错误都是可以处理的

单步调试

单步调试就是在要调试的代码段首行加断点,走一步看一下结果,边走边观察,直到发现有哪一步走错了

在vs环境下,断点F9,单步F10,(F10是逐过程stepover,跳过函数具体执行,F11是逐语句stepinto,可以进入函数)开始调试F5,再按F5跳到下一个断点,若无下一个断点则退出调试。黄色箭头表示即将执行这条语句

//求和#include<stdio.h>int sum(int* buf,int n){    int total = 0;    for(int i=0;i<total;i++)    {        total+=buf[i];    }    return total;}int main(){    int buf[64];    for(int i=0;i<64;i++)    {        buf[i]=i;    }    int result = sum(buf,64);    printf("%d\n",result);    return 0;}

程序结果是零,说明程序有错。利用单步调试发现sum函数写错了

监视窗口可以单独只查看某个变量的情况。内存窗口输入p可以看到指针p对应的内存,观看变量a的内存时输入&a。a=0x12345678对应的内存为78 56 34 12共四个字节。

程序崩溃的起因分类

  • 一个变量未初化、未赋值,就读取它的值。( 这属于逻辑问题,往往是粗心大意的导致的 )

  • 函数栈溢出(1)定义了一个体积太大的局部变量(2)函数嵌套调用,层次过深(如无穷递归)

    int buf[1024*1024*16]; //这个变量体积太大,应该用malloc或者new来动态分配内存
    //无穷的递归调用#include <stdio.h>#include <stdlib.h>void a();void b();void a(){  printf("Calling a() ...\n");  b();}void b(){  printf("Calling b() ...\n");  a();}int main(){  a();  return 0;}
  • 数组越界访问

  • 指针的目标对象不可用,为空指针,野指针(指针未赋值,已经free/delete了却还要用,不恰当的指针强制转换要求)

//野指针:不恰当的强制转换#include <stdio.h>int main(){  int a = 10;  double* p = (double*) &a;  *p = 123.345; // 程序崩溃  return 0;}
  • 全部评论(0)
最新发布的资讯信息
【系统环境|服务器应用】树莓派安装TensorFlow(2020-04-24 21:11)
【系统环境|服务器应用】防面试-SD_WebImage(2020-04-24 21:11)
【系统环境|服务器应用】推荐一款视频控件xgplayer(2020-04-24 21:11)
【系统环境|服务器应用】PostgreSQL 源码解读(27)- 查询语句#12(查询优化-上拉子链接#2)(2020-04-24 21:11)
【系统环境|服务器应用】如何轻松学习JavaScript?(2020-04-24 21:10)
【系统环境|服务器应用】【源码剖析】Launcher 8.0 源码 (12) --- Launcher 启动流程 第五步之计算桌面各布局细节参数(2020-04-24 21:10)
【系统环境|服务器应用】前台碰撞室之console.log与文本字符(2020-04-24 21:10)
【系统环境|服务器应用】好用的Middleware实现(2020-04-24 21:10)
【系统环境|服务器应用】前台面试每日 3+1 —— 第373天(2020-04-24 21:10)
【系统环境|服务器应用】绍圣--kafka之生产者(五)(2020-04-24 21:10)
手机二维码手机访问领取大礼包
返回顶部