![]() |
1
3
除了上面所有正确的答案:我通常做的是显示混合显示(C+组件)。这显示了真正发生的事情。即使您不是底层程序集的专家,它也给出了发生什么情况的一个概念(即它是一个微不足道的替换还是一个复杂的循环)。此外,它还将提供更多进入职能部门的机会。例如,如果宏是
调试器将显示类似 循环和使用的变量类型)。您可以使用宏定义作为参考来理解它。
这提示变量i和j用于调用函数foo_func。 如果您使用VisualC++,它将允许您进入从宏(F11)调用的函数,而不是单独的语句。 |
![]() |
2
2
宏是由预处理器编译的,因此编译器将无法生成调试信息来单步执行宏。 |
![]() |
3
2
长回答。不。 您可以生成在编译器选项中展开的宏的完整列表。它可能会有所帮助,但不会提供调试器功能 |
![]() |
4
2
可能我的答案对VC++用户没有帮助。在Unix上,我执行如下操作:
即,对程序进行预处理并重新格式化。 |
![]() |
5
1
据我所知,唯一可以进入宏的调试器是不工作的(Softice)。很好的例子说明为什么你不应该写50行宏,真的。所以,总的来说……祝你好运。 |
![]() |
6
1
使用宏时,就调试器而言,宏后面的代码将全部扩展到同一源代码行。调试器会看到我的_macro(),并处理这一行,不管宏中有多少代码。 在C++中,模板可以完成宏所能完成的大部分工作,但是它们的工作效率更高,更优雅。因为它们是语言的真实组成部分,所以您也可以使用调试器介入它们!例如:
注意:find()当然是一个标准的库函数,但我编写这个函数只是为了将其与宏进行比较,以演示如何调试它。更不用说宏版本还有很多其他问题。经验法则:尽可能避免宏来编写代码! |
![]() |
SRobertJames · 使用printf的gdb显示 1 年前 |
|
Subin · 在vscode中运行c时出错 1 年前 |
![]() |
Community wiki · 如何调试Python内存故障? 1 年前 |
![]() |
Kai · 有什么方法可以轻松优化VSCode中的锈迹? 2 年前 |
![]() |
Chris Brandon · 如何使节点在堆栈溢出时中断? 2 年前 |