2010-07-01 2 views
2

VC++ 6.0을 사용하여 문제를 디버깅하려고합니다. 나는 문제가 버퍼가 해제 된 후 뭔가를 액세스하는 것 같아요 그래서 VC + + 디버거 메모리 블록을 모니터링하고 무언가를 액세스하려고 할 때 휴식 시간이 멋진 기능이 있는지 궁금하네요.VC++ 6.0에서 디버깅 할 때 메모리 조각이 액세스되는 시점을 확인할 수 있습니까?

감사합니다, 샘 :-) 매우 간단한 지침과 마찬가지로

모든 아이디어, 감사합니다.

답변

0

getbuffer()/setbuffer() 유형 기능을 사용하여 버퍼에 대한 액세스를 제한하십시오. 그런 다음이 함수의 시작 부분에있는 중단 점을 사용하면 중단 점에 도달하면 호출 스택을 볼 수 있습니다. 이로부터 어떻게 컨트롤이 도달했는지 알 수 있습니다.

0

버퍼가 할당되고 해제되는 위치를 제어 할 수있는 경우 VirtualAlloc 함수 (http://msdn.microsoft.com/en-us/library/aa366887%28v=VS.85%29.aspx)를 사용하여 버퍼를 할당 할 수 있습니다.

나중에이 메모리를 비우려면 VirtualFree (http://msdn.microsoft.com/en-us/library/aa366892%28v=VS.85%29.aspx)를 사용하지만, 버퍼를 비우지 않고 VirtualProtect (http://msdn.microsoft.com/en-us/library/aa366898%28v=VS.85%29.aspx)를 사용하여 버퍼를 보호하는 것이 좋습니다. 보호 상수 PAGE_NOACCESS를 사용하십시오 (http://msdn.microsoft.com/en-us/library/aa366786%28v=VS.85%29.aspx 참조). 이 호출 후에 페이지에 액세스하는 모든 사용자는 액세스 위반이 발생합니다.

물론이 트릭은 이런 식으로 할당 할 수있는 페이지 수가 제한되어 있기 때문에 (페이지 표의 크기로) 버퍼를 사용하지 않는다고 가정합니다.

0

Visual Studio에서 breakpoints on memory을 설정할 수 있습니다. 문제의 메모리 주소를 알아야하므로 스택을 덮어 쓰는 경우 유용하지 않습니다.

관련 문제