计算gdb中的变量/函数
evaluate variable/function in gdb
我有以下代码,
...
char* seg = mmap(0, ...)
printf("seg=%xn", seg);
...
程序用seg=b7ffd000
打印。而在gdb中(对于相同的执行),当使用p/x seg
时,它打印$2 = 0x0
。我很困惑。它不是同样的变量seg
吗?为什么值不一样
PS:在mmap
中,第一个参数是映射内存的优选地址,返回值是映射内存的实际地址。
既然你已经在评论中回答了我的问题,我就可以回答了!
您看到的printf
的结果值是真实地址。您在调试器中看到0
是seg
的值,因为当启用优化时,编译器可以自由地做各种奇怪的事情(这通常使逐步调试变得棘手)。"observable"的行为应该总是正确的(假设你没有依赖任何未定义的行为)。
相关文章:
- 未使用的C++未优化的静态成员函数/变量
- 内联函数/变量的外部链接
- 同一函数中的静态函数变量初始化顺序
- 将非静态成员函数C 的使用无效,而将成员功能作为函数变量
- 如何从doxygen输出中排除类的无证件成员函数/变量
- 如何在LUA C API中分配全局LUA函数变量
- 如何将函数变量传递给C lambda函数
- 通过另一个C++函数更改函数变量
- c++11 lambda 真的支持闭包吗?函数变量中存在语义冲突
- C++:静态成员不能在声明时定义,但静态函数变量可以?
- apache-frift是否支持函数变量作为参数
- 类函数/变量在使用之前必须声明
- 函数变量去哪里
- 无法使用函数变量?错误表达式必须具有类类型
- 如何在main中使用函数变量
- 每当尝试打印函数变量时,C++ cout 错误
- 是否存在查看成员函数/变量的整洁等效项
- 访问友元类之间的函数变量
- 函数到函数变量
- 一个定义规则是否强制创建一个静态函数变量