5.1.3.載入符號, 檢視堆疊

1.堆疊 (Stack)

  • 一支執行中的程式稱為程序(process), 一個程序中可以有多個續程(thread), 每個續程中CPU都獨立執行程式, 不會互相干擾

  • 每個續程有各自的堆疊, 堆疊可以存放回返點, 函式參數及區域變數

    • 1.回返點:

      • 當一個執行緒由一個函式執行到另一個函式時, 需要將回返點記錄下來, 以便函式結束後返回到原函式

    • 2.函式參數及區域變數

      • 遞迴函式

        • 每呼叫一次函式, 便會將函式內的參數及區域變數新增加到堆疊上

        • 在函式返回時系統必須將堆疊上屬於那個函式的資料所有權釋放掉

      • 多執行緒執行相同函式

        • 一個函式內的參數及區域變數對於不一樣的執行緒來說都是不一樣

2.範例程式碼

  • 1.貼上範例程式碼

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void func(int a)
{
    printf("func call at %d!!\n", a);
}

int main()
{
    int i;
    for (i = 0; i<100; i++){ /* break point here */
        if (i % 10 == 0)
            func(i);
    }
    return 0;
}

3.載入符號

  • 1.用途

    • 通過載入系統DLL的符號資訊以獲得全部呼叫堆疊資訊

  • 2.用法

    • 1.Tools -> Options -> Debugging -> Symbols -> 勾選Microsoft Symbols Server

4.切換堆疊

Last updated