관리되는 힙 손상을 조사하려면 ba (액세스 중단) 중단 점을 사용하고 싶습니다. 관리 코드로 사용할 수 있습니까? 그렇다면 프로그래밍 방식으로 어떻게 설정할 수 있습니까?프로그래밍 방식으로 관리 코드에서 ba (액세스 위반) 중단 점 설정
UPDATE : 그것은 또한 그렇게 WinDbg는 그들을 설정 괜찮을 것 (- 형 XY의 모든 개체에 대한> 설정 바) '바'명령으로 설정
관리되는 힙 손상을 조사하려면 ba (액세스 중단) 중단 점을 사용하고 싶습니다. 관리 코드로 사용할 수 있습니까? 그렇다면 프로그래밍 방식으로 어떻게 설정할 수 있습니까?프로그래밍 방식으로 관리 코드에서 ba (액세스 위반) 중단 점 설정
UPDATE : 그것은 또한 그렇게 WinDbg는 그들을 설정 괜찮을 것 (- 형 XY의 모든 개체에 대한> 설정 바) '바'명령으로 설정
중단 점은 프로세서 나 하드웨어 브레이크 포인트라고합니다. 좋은 소식
첫 번째는 하드웨어 브레이크 포인트를 설정하기 쉽습니다. 프로세서의 디버그 레지스터 (DR0, DR1, DR2 또는 DR3) 중 하나를 데이터 주소로 설정하고 디버그 제어 레지스터 DR7을 메모리 크기 및 액세스 유형을 설정하는 필드로 설정해야합니다. ,
MOV의 RAX DR0
분명히 당신은 어떻게 든 선택의 언어에서이 어셈블러 명령을 실행하거나, C로 ++ 및 인라인 어셈블리 상호 운용성 사용해야합니다을, 그러나 이것은이다 : (64 어셈블러에서) 명령은 같다 예를 들어 소프트웨어 브레이크 포인트를 설정하는 것보다 쉽습니다.
지금 나쁜 소식 모두의
먼저, SMP 시스템에서 당신은 당신의 코드를 만질 수있는 모든 프로세서에 대해이 작업을 수행해야합니다. 이것은 아마도 프로세스 친 화성을 구성하거나 단일 프로세스 기계에서 디버깅을 수행하면 해결할 수 있습니다. 둘째, Intel 아키텍처에는 4 개의 디버그 프로세서 만 있습니다. WinDbg를 사용하여 프로세서 중단 점을 설정하려고 시도하면 g
을 실행 한 후 4 분 후에 Too many data breakpoints for thread N
을 부릅니다.
수동으로 중단 점을 설정하기에는 너무 많은 개체가 있기 때문에 자동화에 대해 묻는 모든 목적이 있다고 가정합니다. 어쨌든 4 ba
중단 점으로 제한되므로이 부분을 자동화하는 데 별다른 의미가 없습니다.