如何用GDB打印C ++评估结果?

时间:2009-10-17 20:55:08

标签: c++ gdb

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

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

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

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

2 个答案:

答案 0 :(得分:16)

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

您的选择(从最常见到最不经常使用):

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

答案 1 :(得分:4)

您可以尝试输入:

调用“my_function()”

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