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 に答える