1

我在 IBM AIX 下使用 dbx 进行调试。我看到以下内容:

(dbx) print $r4
0x00000001614aa050 
(dbx) print *((int64*)0x00000001614aa050)
-1 
(dbx) print $r3
0x0000000165e08468 
Then I "stepi" my 64bit program which executed the following instruction:
std   r3,0x0(r4)

然后我立即检查了该内存的内容:

(dbx) print *((int64*)0x00000001614aa050)
-1 

还是-1?我期待 $r3 中的内容应该保存到该内存中。然后我使用我的变量手动将值分配给该地址:

(dbx) print &bmc._pLong
0x00000001614aa050 
(dbx) assign bmc._pLong=(int64 *)0x0000000165e08468
(dbx) print *((int64*)0x00000001614aa050)
6004180072 (which is 0x0000000165e08468)

怎么会这样?

4

1 回答 1

0

我认为,不知何故,这是“试点”错误。例如你做了stepi,然后显示std指令?这意味着这是它即将执行的指令——而不是它执行的指令——至少我认为这是正确的。

我会在之前和之后做一些 stepi,并确保我理解 stepi 在做什么。当然,打印出 iar 和 iar 上的指令,以验证 dbx 没有欺骗您。

于 2012-06-16T21:07:22.557 回答