Gcc 如何使用gdb单步定义语句

Gcc 如何使用gdb单步定义语句,gcc,gdb,Gcc,Gdb,我正在使用gcc编译器。我正在编写一段代码,该代码经常涉及在单个define指令中编写语句块。例如: #include<stdio.h> #define DO_RR(x) do { \ for(i=0;i<x; i++) \ printf("%d", i); \ }while(0); int main() { int i=0; DO_RR(5) return 0; } 现在,我希望能够单步完成DO_RR中的语句。然而,当我尝试它时,控件直接从ma

我正在使用gcc编译器。我正在编写一段代码,该代码经常涉及在单个define指令中编写语句块。例如:

#include<stdio.h>    
#define DO_RR(x) do { \
for(i=0;i<x; i++) \
    printf("%d", i); \
}while(0);

int main() {
  int i=0;
  DO_RR(5)
  return 0;
}

现在,我希望能够单步完成DO_RR中的语句。然而,当我尝试它时,控件直接从main中的DO_RR语句跳到下一个语句,而不是单步执行。在预处理器块内部是否还有实现单步执行的方法?

您不能,定义由预处理器展开,并且不在代码中。

为了补充@Angelom的答案,您可以使用函数来解决这个问题。将您可以使用的任何代码从define移动到函数中,您将能够逐步完成函数调用


理想情况下,而且最常见的情况是,您可以用内联函数替换整个define。

就这么简单,这也是不使用define而改用内联函数的最佳理由之一。应将其更改为内联void do_rrint x{forint i=0;i@tenfour使用内联是一个很好的主意。但是,对我来说,它违背了使用示例中不明显的定义的目的。@OP:要格式化为代码,只需粘贴、选择并按Ctrl-K缩进4即可spaces@sehe谢谢你的提示