簡體   English   中英

如何跟蹤 c 程序的流程?

[英]How to track a flow of a c program?

我更多的是一個普遍的問題:如何處理由多個函數組成的 c 程序的執行路徑? 例如,我有以下 c 程序:

 void test_if_statement(int num)
{
    if (num > 0)
        //do smth
        ;
    else
        //do smth else
        ;
}

int main(void)
{
    int num;
    printf("enter an int value:");
    scanf("%d", &num);
    test_if_statement(num);
    return 0;
}

目前我正在使用這樣的東西來查看我的 function go 在 if 語句中的位置:

void test_if_statement(int num)
{
        if (num > 0)
            printf("i'm here\n");
            //do smth
        
        else
            printf("now i'm there\n");
            //do smth else
}

我怎樣才能保持簡單和更通用?;)將 printf 放在每個 if-else 對中似乎過於龐大......

使用printf語句來跟蹤或記錄程序流以用於學習或開發期間的測試沒有任何問題。 但是一個好的調試器可能也可以達到目的,而不必添加內聯代碼。
根據您的環境,有大量可用的調試器選項

以下是調試程序的概述:

調試器是一個程序,它允許您一次單步執行另一個程序。 這在嘗試識別不正確的代碼並分析程序如何“流動”時非常有用。 關鍵概念包括:斷點、步進和查看數據。

您可以使用調試器確定的關鍵事項是:

  • 程序的流程(逐行接下來會發生什么)
  • 變量的創建
  • 存儲在每個變量中的數據
  • 功能的進入/離開
  • 所做的計算
  • IF 語句或 ELSE 語句的輸入
  • 代碼的循環。

更多細節在這里

這通常是調試器的工作,其中大部分允許一次單步執行一個語句。 它們還允許您設置斷點以在特定位置暫停執行、在變量更改時暫停執行的觀察點等。

在不了解您的環境的情況下,我無法推薦使用特定的調試器。 如果您使用 gcc 構建代碼,那么配套調試器(通常)是 gdb。 編譯時需要使用-g標志來啟用源代碼級調試。 它不是最友好的調試器,但它非常全面。 如果您在 Windows 上的 Visual Studio 環境中構建,則應該有一個調試器作為 IDE 的一部分。

如果您使用 IDE 來編寫代碼,那么它將具有用於調試器的內置工具,您唯一需要做的就是設置斷點,然后當程序運行時,您的代碼會在中斷時暫停-點被擊中。 IDE 還提供了在那個時刻查找變量值的工具。

如果您沒有使用 IDE 並且您的問題具體是 w.r.t C您可以考慮使用GDB 看看這里,了解如何使用 GDB 調試程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM