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

ner*_*ero 7 c++ gdb

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

if (strcmp(current_node->word,min_node->word) > 0)
      min_node = current_node;
Run Code Online (Sandbox Code Playgroud)

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

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

Mar*_*wis 16

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

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

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