【问题标题】:How to track a flow of a c program?如何跟踪c程序的流程?
【发布时间】:2020-12-29 13:19:03
【问题描述】:

我比较笼统的问题是:如何处理由多个函数组成的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;
}

目前我正在使用类似这样的东西来查看我的函数在 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 对中似乎过于庞大...

【问题讨论】:

  • 看看使用调试器,它允许您逐行运行程序并查看不同变量的值。

标签: c testing program-flow


【解决方案1】:

这通常是 调试器 的工作,其中大部分允许一次单步执行一个语句的代码。它们还允许您设置断点以在特定位置暂停执行、在变量更改时暂停执行的观察点等。

在不了解您的环境的情况下,我无法推荐使用特定的调试器。如果您使用 gcc 构建代码,那么配套调试器(通常)是 gdb。编译时需要使用-g 标志以启用源代码级调试。它不是最友好的调试器,但它非常全面。如果您在 Windows 上的 Visual Studio 环境中构建,则应该有一个调试器作为 IDE 的一部分。

【讨论】:

    【解决方案2】:

    如果您使用 IDE 来编写代码,那么它将具有用于调试器的内置功能,您唯一需要做的就是设置断点,然后当程序运行时,您的代码会随时暂停一个断点被击中。 IDE 还提供了在那个时刻查找变量值的工具。

    如果您没有使用 IDE 并且您的问题具体是 w.r.t C,您可以考虑使用 GDB。查看here 以更好地了解如何使用 GDB 调试程序。

    【讨论】:

      【解决方案3】:

      使用printf 语句跟踪或记录程序流以用于学习或开发期间的测试没有任何问题。但是,一个好的调试器可能也可以达到目的,而无需添加内联代码。
      根据您的环境,有a large list of debugger options available

      以下是debugging programs的概述:

      调试器是一个允许您单步执行另一个程序的程序 一次编程一行。这在尝试时非常有用 识别不正确的代码并分析程序如何“流动”。钥匙 概念包括:断点、步进和查看数据。

      您可以使用调试器确定的关键事项是:

      • 程序的流程(接下来逐行发生的事情)
      • 变量的创建
      • 每个变量中存储的数据
      • 函数的进入/离开
      • 所做的计算
      • IF 语句或 ELSE 语句的输入
      • 代码循环。

      Much more detail here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多