문제

저는 Visual Studio를 사용하여 네이티브 애플리케이션을 개발하고 있습니다. 코드에 __asm ​​int 3 또는 __debugbreak를 사용하여 배치된 프로그래밍 방식 중단점(어설션)이 있습니다.때로는 이 기능을 사용하지 않도록 설정하여 동일한 디버깅 세션에서 연속적인 적중이 더 이상 디버거에 침입하지 않도록 하고 싶습니다.어떻게 해야 하나요?

도움이 되었습니까?

해결책

x86 / x64

x86/x64 애플리케이션을 작성한다고 가정하고 Watch 창에 다음을 작성하십시오.

x86: *(char *)eip,x

x64: *(char *)rip,x

INT 3의 opcode인 0xcc 값이 표시되어야 합니다.이를 NOP의 opcode인 0x90으로 바꿉니다.eip를 주소로 사용하여 메모리 창을 사용할 수도 있습니다.

PPC

PPC 애플리케이션을 작성한다고 가정합니다(예:Xbox 360), 시계 창에 다음을 작성하세요.

*(int *)iar,x

트랩에 대한 opcode인 0xfeNNNNNN 값이 표시되어야 합니다(대부분 0x0fe00016 = 무조건 트랩).이를 NOP의 opcode인 0x60000000으로 바꿉니다.

다른 팁

다음과 같이 시도해 볼 수도 있습니다.

#define ASSERT(x) {\
   if (!(x)) \
   { \
      static bool ignore = false; \
      if (!ignore) \
      { \
         ignore = true; \
         __asm int 3 \
      } \
   }\
}

디버그는 한 번만 실행되어야 합니다.사용자에게 메시지 상자를 표시하고 무엇을 해야 할지 물어볼 수도 있습니다.계속(아무 일도 일어나지 않음), 중단(int 3이 호출됨) 또는 무시(무시가 true로 설정되고 중단점이 다시 적중되지 않음)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top