2010-05-04 59 views
4

我正在用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 

是怎么回事???

+0

你确定这条线正在运行吗?如果您在载入程序后并未“运行”程序并且变量是全局的,则可能无法初始化它。在main中放置一个断点,然后环顾四周。 – luqui 2010-05-04 07:19:35

+0

我知道它正在运行。如果“下一行”为“example >> =(31);',那么我在开始打印东西之前设置了一个bpoint以达到一条线。 – sepiroth 2010-05-04 07:20:48

+1

@luqui: – Troubadour 2010-05-04 07:22:10

回答

8

你需要采取例子的地址在GDB声明:

(gdb) x/4bt &example 
5

我认为x命令检查内存,所以example将被解释为指针。尝试

x/4bt &example 

或者干脆

print /x example 
0

我没有检查gdb命令格式,但看着它好像你希望看到什么是存储在example,而不是打印的地址中的最后声明example ...看起来exampleall 1s0xffffffff),并且您在尝试在出现错误时在内存中查看该位置。