计算gdb中的变量/函数

evaluate variable/function in gdb

本文关键字:函数 变量 gdb 计算      更新时间:2023-10-16

我有以下代码,

...
char* seg = mmap(0, ...)
printf("seg=%xn", seg);
...

程序用seg=b7ffd000打印。而在gdb中(对于相同的执行),当使用p/x seg时,它打印$2 = 0x0。我很困惑。它不是同样的变量seg吗?为什么值不一样

PS:在mmap中,第一个参数是映射内存的优选地址,返回值是映射内存的实际地址。

既然你已经在评论中回答了我的问题,我就可以回答了!

您看到的printf的结果值是真实地址。您在调试器中看到0seg的值,因为当启用优化时,编译器可以自由地做各种奇怪的事情(这通常使逐步调试变得棘手)。"observable"的行为应该总是正确的(假设你没有依赖任何未定义的行为)。