2012-04-06 3 views
1

내 코드에는 내용이 완전히 가비지 인 개체가 있습니다. 나는 코드의 다른 부분에서 잘못된 쓰기가 일어 났으며 내가 언급 한 객체의 주소에 (운) 운이 쓴 것으로 추측한다.잘못된 쓰기를 감지하는 방법

나는이 버그의 기원을 추적 할 수 있도록 메모리 주소가받는 모든 내용을 알려주는 도구가 있는지 궁금합니다.

답변

4

대부분의 디버거는 쓰기시 중단 점을 지원합니다.

예를 들어 Visual Studio에서 디버거로 앱을 실행하고 의심스러운 변수 초기화에 가까운 일반 중단 점에서 중단 한 다음 메뉴에서 '디버그/새 중단 점/새 데이터 중단 점'으로 이동해야합니다.

SoftIce에서 BPM 명령을 사용할 수 있습니다. :) 그 중 하나는 또한 메모리 액세스를 중단 할 수 있습니다.

+2

SoftIce를 아는 사람은 누구나 내게 +1을받습니다. – ildjarn

+0

좋은 옛날 ... :) – Eugene

0

플랫폼에 따라 VirtualProtect과 같은 것을 사용하여 해당 메모리 영역을 잠글 수 있어야합니다 (Linux에서 mprotect라고 생각합니다). 이렇게하면 메모리 영역에 부적절하게 액세스 할 때 액세스 위반/세그 폴트가 발생합니다. 그리고 accessviolation/segfault가 생기면 디버거에서 catch 할 수 있습니다.

그러나 메모리 영역을 잠 그려면 일반적으로 영역이 메모리 페이지 (적어도 윈도우)에 정렬되어야하며 이는 문제가 될 수 있습니다.

이외에도 디버거에서 데이터 중단 점을 사용할 수 있습니다.

0

Windows의 경우 글로벌 플래그 (gflags.exe, Windows의 경우 디버깅 도구의 일부)를 사용하고 PageHeap을 켤 수 있습니다. (이미지 탭에서 .exe의 이름을 입력 한 다음 "페이지 힙 사용"확인란을 클릭하면 나타납니다.) 그런 다음 프로그램을 실행하십시오.

끝나면 다시 끄십시오.

관련 문제