프로그래밍 중단점/어설션을 비활성화하는 방법은 무엇입니까?
-
02-07-2019 - |
문제
저는 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로 설정되고 중단점이 다시 적중되지 않음)
제휴하지 않습니다 StackOverflow