簡體   English   中英

C中的程序狀態

[英]program state in C

我剛剛開始用c編程,我想測試一些代碼。 因此,我需要在我已經知道的程序中的特定點上知道變量的值。

在搜索時,我看到很多人都在使用gdb和core dump,但是我發現,大多數示例在發生崩潰時都使用它來調試代碼。 就我而言,我不想終止執行,我只想在特定點保存/知道特定變量的值。

例如:

如果我有這段代碼:

int func(int x){

    x = 3 * x;

    if(x > 0){

        x = x % 4;
        /* I want to know the value of x at this point*/
    }
    else {

        x = x + 1;
        /* I want to know the value of x at this point*/
    }

    return x;

}

如果用戶輸入值,我想知道計算后(if)塊內x的值是什么。

更新:為澄清我的問題,我有一個大代碼,我想測試完整的程序包,我想編寫一個函數,該函數告訴我此程序點的存儲值是多少。

GDB是最適合您的工具。 在程序執行過程中,您可以看到變量的值。 請按照以下步驟操作:

用-g標志編譯程序。

gcc -g program.c -o output

現在使用gdb運行程序:

gdb output

在Gdb命令行中,使用以下命令在'main'處設置一個斷點:

(gdb) b main

或使用低於1的值在特定行上設置斷點。

(gdb) b line_number

現在輸入“ r”運行程序。

(gdb) r

輸入“ n”,然后按Enter鍵轉到下一行

(gdb) n 

輸入“ step”以進入功能:

(gdb) step 

通過使用檢查變量值

(gdb) print variable-name

將斷點保留在要查看變量值的“第no行”,並使用“ print variable-name ”查看值。

請將此作為更多GDB命令的參考: http : //www.yolinux.com/TUTORIALS/GDB-Commands.html

希望這個答案可以幫助您調試代碼。

我想你可以用這樣的東西

printf("%d\n",x);

在每個表達式之后

x= ...

在您的功能中。 或者如果您不想將值輸出到控制台,則可以使用fprintf在文件中寫入值,而不是printf

使用調試器(安裝任何C IDE(例如Eclipse CDT),您將無需進行任何配置)

您甚至可以在線進行調試https://www.onlinegdb.com/

使用printf擴展的另一種方法是使用調試宏或函數。 例如:

https://github.com/jleffler/soq/blob/master/src/libsoq/debug.c

這樣的事情可用於允許針對某些功能用例動態啟用調試,然后再次將其禁用,這樣在調試代碼時就不會產生過多的輸出。

暫無
暫無

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

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