Глобальная переменная изменена, но точка останова памяти не сработала

У меня есть логическая переменная, которая должна быть истинной, но иногда ей присваивается значение ложной. Я установил точку останова памяти, чтобы увидеть, что это меняет. К моему удивлению, точка останова не сработала, но переменная снова стала ложной.

Что могло изменить память без того, чтобы точка останова памяти ее ловила?


person Suma    schedule 02.03.2010    source источник
comment
@Suma: запрос на редактирование: слишком много ложных, недостаточно истинных.   -  person JXG    schedule 02.03.2010
comment
может быть, поэтому точка останова не сработала;)   -  person jk.    schedule 02.03.2010
comment
@JXG: Готово, спасибо, что заметили.   -  person Suma    schedule 02.03.2010


Ответы (1)


Несколько мыслей.

  1. Если вы передаете логическое значение в функцию ядра, и ЭТО изменяет его (или, возможно, вызов функции ядра перезаписывает память, потому что он вызывается неправильно), то это не приведет к срабатыванию точки останова данных.

  2. Если вы используете несколько процессов, а другой процесс, который не отлаживается, записывает в эту область памяти, то точка останова не сработает.

  3. (Редактировать) Как указано в комментариях, прямой доступ к памяти в памяти, на которой установлена ​​аппаратная точка останова, также не будет обнаружен.

Я предполагаю, что вы где-то не проверяете размер буфера должным образом, и вас поражает (1), возможно, при чтении данных из файла?

person Goz    schedule 02.03.2010
comment
Точное попадание. Виновником был вызов: static bool screenSaverEnabled; Информация о системных параметрах (SPI_GETSCREENSAVEACTIVE, 0, &screenSaverEnabled, 0); Дополнительный урок: будьте осторожны, есть bool и BOOL. - person Suma; 02.03.2010
comment
Для полноты я предлагаю добавить в ответ еще одну возможность: передача DMA (например, при использовании перекрывающегося ввода-вывода) может изменить память из-под контроля ЦП. - person Suma; 02.03.2010
comment
Вы совершенно правы, Сума. Я думал, что добавил туда DMA! Это не раз кусало меня на платформах MIPS;) - person Goz; 02.03.2010