【问题标题】:How to print result of C++ evaluation with GDB?如何使用 GDB 打印 C++ 评估结果?
【发布时间】:2025-12-04 11:05:03
【问题描述】:

我一直在环顾四周,但无法弄清楚如何在 GDB 中打印出评估结果。例如,在下面的代码中:

if (strcmp(current_node->word,min_node->word) > 0)
      min_node = current_node;

(上面我正在尝试一种可能的方法来检查字符串的字母顺序,但不确定它是否正常工作。)

现在我可以观察min_node 并查看值是否发生变化,但在涉及更多的代码中,这有时会更复杂。我想知道是否有一种简单的方法可以查看当前 GDB / 程序流所在行的测试评估。

【问题讨论】:

    标签: c++ gdb


    【解决方案1】:

    gdb 中没有表达式级单步执行,如果这是您所要求的。

    您的选择是(从最常用到最不常用):

    1. 评估表达式在gdb中,执行print strcmp(current_node->word,min_node->word)。令人惊讶的是,这是可行的:gdb 可以通过将代码注入正在运行的程序并让它执行代码来评估函数调用。当然,如果函数有副作用或可能崩溃,这是相当危险的;在这种情况下,它非常无害,人们通常不会考虑潜在的问题。
    2. 执行指令级(汇编)单步执行 (ni/si)。调用指令完成后,您会根据处理器约定(x86 上的 %eax)在寄存器中找到结果。
    3. 编辑代码以将中间值分配给变量,并将其拆分为单独的行/语句;然后使用常规单步执行并检查变量。

    【讨论】:

      【解决方案2】:

      您可以简单地尝试输入:

      调用“my_funtion()”

      据我所知,虽然内联函数时它不起作用。

      【讨论】: