2013-05-31 1 views
2

Visual Studio 2010 (C++ 작성)을 사용하고 #define 함수를 호출 할 때 예외가 발생했습니다. 정의 된 함수는 약간 복잡하며 디버거를 사용하여 예외가 발생하는 곳을 찾아 낼 수 있기를 바랍니다. 이 일을 할 수있는 방법이 있습니까?#define 함수 내에서 Visual Studio 디버거를 사용할 수 있습니까?

관계는 다음과 같습니다. my.htheir.h에 선언 된 제 3 자 클래스에서 상속 한 클래스를 정의합니다. their.h의 제 3 자 클래스는 관심있는 매크로를 포함하는데, 이는 다른 헤더에 정의되어 있습니다 (예 :`macro.h ').

답변

2

디버깅하기 전에 매크로를 소스 코드로 확장해야합니다. 수동으로하거나 Visual Studio에서 전 처리기 출력을 생성 할 수 있습니다. http://msdn.microsoft.com/en-us/library/8z9z0bx6(v=vs.80).aspx은 VS 2005 프로세스를 설명합니다. 그러면 Visual Studio 전 처리기에서 생성 된 .i 파일로 대체 된 소스로 새 "디버그"프로젝트를 만들어야합니다. 이것은 사소한 프로젝트에있어서 고통입니다. 그래서 수동으로 먼저 시도 할 것입니다. 특히 예외를 유발하는 특정 매크로를 식별 했으므로 특히 수동으로 확장 할 수 있습니다. 사전 처리기에서 생성 된 .i 파일을 상호 참조 용으로 사용할 수도 있습니다.
UPD : 문제의 매크로가 여러 위치에서 사용되는 경우 예외의 원인이되는 위치를 찾아야 할 수 있습니다. 디버거에서 실행합니다 (그렇지 않으면 전체 디버그 정보가 생성 된 것으로 가정합니다). 예외 발생시 호출 스택을 확인하십시오. 해당 위치를 확장하십시오.
은주의 할 : 오픈 소스 커뮤니티에서 특정 프로젝트 (나는 리버스 엔지니어링에 의해 발견되는 자신의 영업 비밀을 유지하기 위해 추측) 그래서 행운 코드 난독 화 도구로 매크로를 사용하여 악명이 높다 ... 나는

+0

두 개의 확장 레이어를 사용하여 수동 확장 방식으로 갔으며 버그를 격리했습니다. 불행히도, 제 3 자 코드에 있으므로 수정할 수 없습니다. 그냥 주위를 해결할 것입니다. 감사. –

1

에 직면하고있어 VS2017이 디버깅 중에 매크로를 분석하지 않는다는 사실에 놀랐습니다. Resharper for C/C++은 매크로를 부분적으로 또는 완전히 확장 할 수 있다는 점에서 훌륭합니다. 매크로를 확장하고 매크로를 확장하거나 다시 빌드하고 디버그 한 다음 변경 사항을 되돌릴 수 있습니다. 나는 시험판 버전을 가지고 놀 수 있다고 확신한다.

관련 문제