我在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中的内容应该保存到那里 记忆。然后我使用my手动将值分配给该地址 变量:
(dbx) print &bmc._pLong
0x00000001614aa050
(dbx) assign bmc._pLong=(int64 *)0x0000000165e08468
(dbx) print *((int64*)0x00000001614aa050)
6004180072 (which is 0x0000000165e08468)
怎么会发生这种情况?
答案 0 :(得分:0)
我认为,不知何故,这是“飞行员”错误。例如你做了stepi然后显示了std指令?这意味着那是它即将执行的指令 - 而不是它执行的指令 - 至少我认为这是正确的。
我会在之前和之后做一些stepi,并确保我理解stepi正在做什么。当然,打印出iar和iar上的指令,以验证dbx不会对你造成影响。