2010-03-02 20 views
3

我有一個bool變量,應該是true,但有時會設置爲false。我已經設置了一個內存斷點來查看正在改變的內容。令我驚訝的是,這個斷點沒有被打破,但是這個變量又一次變成了錯誤。全局變量已更改,但內存斷點未命中

什麼可以改變內存沒有內存斷點捕捉它?

+4

@Suma:編輯請求:錯誤太多,沒有足夠的trues。 – JXG 2010-03-02 11:20:42

+2

也許這就是爲什麼斷點沒有觸發;) – 2010-03-02 11:24:06

+0

@JXG:完成,感謝您的注意。 – Suma 2010-03-02 12:15:22

回答

4

一些想法。

  1. 如果你通過了布爾值轉換爲內核函數,這是改變它(或者是一個內核函數調用覆蓋的內存,因爲它被稱爲不正確的),那麼將不會觸發數據斷點。

  2. 如果您正在使用多個進程和另一個沒有被調試的進程寫入該內存位置,那麼您的斷點將不會被觸發。

  3. (編輯)正如註釋中所指出的,硬件斷點處於內存中的DMA也不會被拾取。

我的猜測是,你不檢查緩衝區大小適當的地方,你是過得去(1),也許讀時的數據從文件打?

+0

準確命中。罪魁禍首叫: static bool screenSaverEnabled;系統參數信息(SPI_GETSCREENSAVEACTIVE,0,&screenSaverEnabled,0); SystemParametersInfo(SPI_GETSCREENSAVEACTIVE,0,&screenSaverEnabled,0); 額外的教訓:要小心,有bool和BOOL。 – Suma 2010-03-02 12:12:55

+0

爲了完整性,我建議在答案中增加一個可能性:DMA傳輸(如使用重疊I/O時)可以將內存從CPU控制中移出。 – Suma 2010-03-02 12:13:57

+0

你是蘇馬權利。我以爲我在那裏添加了DMA!這讓我在MIPS平臺上不止一次地陷入困境;) – Goz 2010-03-02 12:25:36