2010-05-04 88 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),並且您在嘗試在出現錯誤時在內存中查看該位置。