c - 位操作困难
问题描述:
我正在用GDB调试一个程序。c - 位操作困难
unsigned int example = ~0;
给我:
(gdb) x/4bt example
0xffd99788: 10101000 10010111 11011001 11111111
这是为什么不全部为1?我把它定义为〜0 ...那么下一行代码是:
example>>=(31);
和GDB给了我这个当我尝试检查比特处的内存:
(gdb) x/4bt example
0xffffffff: Cannot access memory at address 0xffffffff
是怎么回事???
答
你需要采取例子的地址在GDB声明:
(gdb) x/4bt &example
答
我认为x
命令检查内存,所以example
将被解释为指针。尝试
x/4bt &example
或者干脆
print /x example
答
我没有检查gdb命令格式,但看着它好像你希望看到什么是存储在example
,而不是打印的地址中的最后声明example
...看起来example
是all 1s
(0xffffffff
),并且您在尝试在出现错误时在内存中查看该位置。
你确定这条线正在运行吗?如果您在载入程序后并未“运行”程序并且变量是全局的,则可能无法初始化它。在main中放置一个断点,然后环顾四周。 – luqui 2010-05-04 07:19:35
我知道它正在运行。如果“下一行”为“example >> =(31);',那么我在开始打印东西之前设置了一个bpoint以达到一条线。 – sepiroth 2010-05-04 07:20:48
@luqui: – Troubadour 2010-05-04 07:22:10