2010-03-02 6 views
3

사실 일 수있는 bool 변수가 있지만 때때로 false로 설정됩니다. 나는 메모리 브레이크 포인트를 설정하여 무엇이 바뀌고 있는지 살펴 보았다. 놀랍게도 중단 점은 맞지 않았지만 변수는 다시 거짓으로 바뀌 었습니다.전역 변수가 변경되었지만 메모리 중단 점에 도달하지 않았습니다.

메모리 중단 점이 잡히지 않고 메모리를 바꿀 수있는 것은 무엇입니까?

+4

@Suma : 편집 요청 : 너무 많은 거짓말, 부족한 진실. – JXG

+2

어쩌면 그 breakpoint didnt 트리거 이유;) –

+0

@JXG : 완료, 고마워요. – Suma

답변

4

몇 가지 생각.

  1. 당신이 커널 함수에 부울 값을 전달하고 (그것이 잘못이라고 혹은 커널 함수 호출이 덮어 쓰기되는 메모리 때문에) 그 다음 데이터 중단 점을 발사하지 않을 것이다 그것을 변경됩니다.

  2. 여러 프로세스를 사용 중이고 디버깅되지 않는 다른 프로세스가 해당 메모리 위치에 기록하면 중단 점이 트리거되지 않습니다.

  3. (편집) 의견에서 지적한대로 하드웨어 중단 점이있는 메모리에 DMA도 가져 오지 않습니다.

내 생각에 버퍼 크기를 적절하게 확인하지 않아서 파일에서 데이터를 읽을 때 (1)에 맞았습니까?

+0

정확한 명중입니다. 범인은 전화했다 : 정적 bool screenSaverEnabled; SystemParametersInfo (SPI_GETSCREENSAVEACTIVE, 0, & screenSaverEnabled, 0); 추가 학습 내용 : BOOL 및 BOOL이 있음을 유의하십시오. – Suma

+0

완성을 위해 대답에 하나 더 많은 가능성을 추가하는 것이 좋습니다. DMA 전송 (오버랩 된 I/O 사용시와 같이)은 CPU 컨트롤에서 메모리를 변경할 수 있습니다. – Suma

+0

당신은 바로 슈마입니다. 거기에 DMA를 추가했다고 생각했습니다! 그것은 MIPS 플랫폼에서 두 번 이상 물었다.) – Goz

관련 문제