评估gdb中的变量/函数

时间:2011-04-28 19:21:17

标签: c++ c gdb mmap

我有以下代码,

...
char* seg = mmap(0, ...)
printf("seg=%x\n", seg);
...

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

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

1 个答案:

答案 0 :(得分:3)

现在您已在评论中回答了我的问题,我可以回答!

您看到的printf结果的值是真实地址。您在调试器中看到0seg的值,因为在启用优化时,编译器可以自由地执行各种奇怪的操作(这通常会使逐步调试变得棘手)。但是,“可观察”行为应始终是正确的(假设您不依赖任何未定义的行为)。