【问题标题】:program state in CC中的程序状态
【发布时间】:2019-07-05 08:56:48
【问题描述】:

我刚开始用 c 编程,我想测试一些代码。所以,我需要知道我已经知道的程序中特定点的变量值。

在搜索时,我看到很多人都在使用 gdb 和核心转储,但我发现大多数示例在发生崩溃时都使用它来调试代码。 就我而言,我不想终止执行,我只想保存/知道特定变量在特定点的值。

例如:

如果我有这段代码:

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的值是多少。

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

【问题讨论】:

  • 使用调试器,您可以设置导致程序停止的断点,然后您可以在监控变量及其值的同时逐行执行代码,一旦完成你可以继续执行。其他调试方式包括“printf 调试”,您只需添加大量printf 调用即可打印程序的状态以及重要和相关变量的值。

标签: c debugging testing


【解决方案1】:

GDB 是最适合您的工具。当程序正在执行时,您可以看到变量的值。请按照以下步骤操作:

使用 -g 标志编译您的程序。

gcc -g program.c -o output

现在用 gdb 运行你的程序:

gdb output

在 Gdb 命令行中,使用以下命令在 'main' 处设置断点:

(gdb) b main

或使用低于一个在特定行设置断点。

(gdb) b line_number

现在输入“r”来运行程序。

(gdb) r

输入'n'并按回车进入下一行

(gdb) n 

输入“step”进入函数:

(gdb) step 

使用检查变量值

(gdb) print variable-name

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

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

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

【讨论】:

    【解决方案2】:

    我认为你可以使用这样的东西

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

    在每个表达式之后

    x= ...
    

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

    【讨论】:

    • 谢谢彼得,问题是我的代码很大,我不想手动放置 fprintf。实际上,我有一个函数可以根据一些要求来决定具体点,然后我打算使用检测来知道此时变量的值(当前内存位置里面是什么)。
    【解决方案3】:

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

    你甚至可以在线调试https://www.onlinegdb.com/

    【讨论】:

      【解决方案4】:

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

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

      这样的东西可用于允许为您的函数的某些用例动态启用调试,然后再次禁用它,这样您在调试代码时就不必处理太多输出。

      【讨论】:

        猜你喜欢
        • 2021-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-03
        • 1970-01-01
        • 1970-01-01
        • 2023-03-29
        相关资源
        最近更新 更多