(三十二)單步調(diào)試技術(shù)

編譯錯(cuò)誤與運(yùn)行錯(cuò)誤

  • 編譯錯(cuò)誤:編譯器提示的錯(cuò)誤,低級(jí)錯(cuò)誤,語(yǔ)法有錯(cuò),根本無(wú)法生成exe文件

  • 運(yùn)行錯(cuò)誤:程序運(yùn)行的結(jié)果與預(yù)期不一致,說(shuō)明程序不對(duì),存在bug,需要修改

    一般情況下,能復(fù)現(xiàn)的錯(cuò)誤都是可以解決的

單步調(diào)試

單步調(diào)試就是在要調(diào)試的代碼段首行加斷點(diǎn),走一步看一下結(jié)果,邊走邊觀察,直到發(fā)現(xiàn)有哪一步走錯(cuò)了

在vs環(huán)境下,斷點(diǎn)F9,單步F10,(F10是逐過(guò)程stepover,跳過(guò)函數(shù)具體執(zhí)行,F(xiàn)11是逐語(yǔ)句stepinto,可以進(jìn)入函數(shù))開(kāi)始調(diào)試F5,再按F5跳到下一個(gè)斷點(diǎn),若無(wú)下一個(gè)斷點(diǎn)則退出調(diào)試。黃色箭頭表示即將執(zhí)行這條語(yǔ)句

//求和
#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;
}

程序結(jié)果是零,說(shuō)明程序有錯(cuò)。利用單步調(diào)試發(fā)現(xiàn)sum函數(shù)寫(xiě)錯(cuò)了

監(jiān)視窗口可以單獨(dú)只查看某個(gè)變量的情況。內(nèi)存窗口輸入p可以看到指針p對(duì)應(yīng)的內(nèi)存,觀看變量a的內(nèi)存時(shí)輸入&a。a=0x12345678對(duì)應(yīng)的內(nèi)存為78 56 34 12共四個(gè)字節(jié)。

程序崩潰的原因分類

  • 一個(gè)變量未初化、未賦值,就讀取它的值。( 這屬于邏輯問(wèn)題,往往是粗心大意的導(dǎo)致的 )

  • 函數(shù)棧溢出(1)定義了一個(gè)體積太大的局部變量(2)函數(shù)嵌套調(diào)用,層次過(guò)深(如無(wú)窮遞歸)

    int buf[1024*1024*16]; //這個(gè)變量體積太大,應(yīng)該用malloc或new來(lái)動(dòng)態(tài)分配內(nèi)存
    
    //無(wú)窮的遞歸調(diào)用
    #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;
    }
    
  • 數(shù)組越界訪問(wèn)

  • 指針的目標(biāo)對(duì)象不可用,為空指針,野指針(指針未賦值,已經(jīng)free/delete了卻還要用,不恰當(dāng)?shù)闹羔槒?qiáng)制轉(zhuǎn)換要求)

//野指針:不恰當(dāng)?shù)膹?qiáng)制轉(zhuǎn)換
#include <stdio.h>
int main()
{
  int a = 10;
  double* p = (double*) &a;
  *p = 123.345; // 程序崩潰
  return 0;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容