gpt4 book ai didi

c++ - GNU 编译器调试 'Level'

转载 作者:行者123 更新时间:2023-11-27 22:32:17 25 4
gpt4 key购买 nike

在浏览我的编译器的各种选项开关时(我的组织支持我的给定硬件配置的 GNU C++ 3.2.3),我遇到了这个:

-glevel
:
Level 3 includes extra information, such as all the macro definitions
present in the program. Some debuggers support macro expansion when
you use -g3.

我用几个宏编译了一个测试程序(例如循环、参数上的 if-then-else),然后尝试使用商业调试器 TotalView 和 GDB 编译的代码 -g3。我没有看到任何区别(宏没有扩展到它们的原始代码,我无法“进入”宏等)。

这里有人有在 GNU 编译器上使用 -g3 获得额外调试“功能”的经验吗?

最佳答案

您的问题似乎暗示您不了解宏是什么。 当然您不能进入宏。

-g3 对于“大量宏”程序非常有用。考虑:

int main()
{
int i;
for (i = 0; i < 20; ++i) {
#define A(x) case x: printf(#x "\n"); break
switch(i) {
A(1); A(2); A(3); A(4); /* line 7 */
#undef A
#define A(x) case 10+x: printf("10+" #x "\n"); break
A(1); A(2); /* line 10 */
}
}
return 0;
}

如果没有 -g3,当你停在第 7 行或第 10 行时,你可能需要大量搜索 A() 的定义,并且可能有很多这样的定义,所以你必须找出哪一个是“当前”。

使用 -g3,GDB 可以为您完成繁重的工作:

(gdb) b 7
Breakpoint 1 at 0x4004cc: file m.c, line 7.
(gdb) b 10
Breakpoint 2 at 0x4004fc: file m.c, line 10.
(gdb) r

Breakpoint 1, main () at m.c:7
7 A(1); A(2); A(3); A(4);
(gdb) info macro A
Defined at /tmp/m.c:5
#define A(x) case x: printf(#x "\n"); break
(gdb) c
1
2
3
4

Breakpoint 2, main () at m.c:10
10 A(1); A(2);
(gdb) info macro A
Defined at /tmp/m.c:9
#define A(x) case 10+x: printf("10+" #x "\n"); break
(gdb) q

关于c++ - GNU 编译器调试 'Level',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/404169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com