gpt4 book ai didi

gdb - gdb 可以打印扩展的预处理器/宏结果吗?

转载 作者:行者123 更新时间:2023-12-02 19:09:48 25 4
gpt4 key购买 nike

例如:

#include <stdlib.h>

#define A 20
#define B 22
#define C (A+B)

int main()
{
srand(time(0));
int i = (rand()&1) + C;
return i;
}

在 gdb 中,

(gdb) print C
No symbol "C" in current context.

我如何知道C是什么? gdb 可以告诉我吗? (我添加了 rand() 所以我们不能轻易推断出它是什么)

预处理器将用 (20+22) 替换 C。这个值可以在 debuginfo 中以某种方式打印吗?

在宏可能非常复杂的实际示例中,我不想浪费时间做预处理器的工作。

最佳答案

How can I know what C is?

首先,您需要使用 -g3 标志构建程序,以便宏信息包含在调试信息中,启动程序并使用 info Macro 显示宏定义:

(gdb) start
Temporary breakpoint 1 at 0x40114e: file 1.c, line 9.
Starting program: /tmp/a.out
Missing separate debuginfos, use: dnf debuginfo-install glibc-2.31-4.fc32.x86_64

Temporary breakpoint 1, main () at 1.c:9
9 srand(time(0));
(gdb) info macro C
Defined at /tmp/1.c:5
#define C (A+B)
(gdb) info macro A
Defined at /tmp/1.c:3
#define A 20
(gdb) info macro B
Defined at /tmp/1.c:4
#define B 22

您还可以扩展宏:

(gdb) macro expand C
expands to: (20+22)

关于gdb - gdb 可以打印扩展的预处理器/宏结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64471476/

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