C中的程序状态

时间:2019-07-05 08:56:48

标签: c debugging testing dumping

我刚刚开始用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的值。

更新: 为了澄清我的问题,我有一个很大的代码,我想测试完整的程序包,我想编写一个函数来告诉我该程序点的存储值是什么。

4 个答案:

答案 0 :(得分:2)

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

将断点保留在要查看变量值的“行号”处,并使用“ print variable-name”查看值。

请将此作为更多GDB命令的参考: http://www.yolinux.com/TUTORIALS/GDB-Commands.html

希望这个答案将帮助您调试代码。

答案 1 :(得分:1)

我认为您可以使用类似的内容

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

每个表达式后带有

x= ...

在您的功能中。 或者,如果您不想将值输出到控制台,则可以使用 fprintf 将值写入文件中,而不是 printf

答案 2 :(得分:0)

使用调试器(安装任何C IDE(如Eclipse CDT),您将无需进行任何配置)

您甚至可以在线进行调试https://www.onlinegdb.com/

答案 3 :(得分:0)

使用printf扩展的另一种方法是使用调试宏或函数。例如。看到:

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

可以使用类似的方法来动态启用某些功能用例的调试,然后再将其禁用,这样就不必在调试代码时获得过多的输出。