2009-11-13 3 views
0

MSVC 6.0을 사용하여 Win32API에서 매크로를 호출하면 액세스 위반이 발생합니다. 올바른 데이터를 가리키고있는 것은 아니지만 포인터에 매크로가 전달됨을 알고 있습니다.MSVC 6.0의 디버거를 사용하여 매크로에 '들어가기'할 수 있습니까?

매크로는 여러 포인터를 허용하며 어떤 포인터가 잘못되었는지는 확실하지 않으므로 MSVC의 디버거를 사용하여 문제가 발생한 위치를 정확히 파악할 수있는 매크로를 사용하고 싶습니다. 지금까지 시도했을 때 디버거가 액세스 위반 오류를 throw합니다.

MSVC 6.0의 디버거를 사용하여 매크로를 '단계 들어가기'가능합니까? 그렇지 않다면 어쨌든 매크로가 확장되는 부분을 확인해야 할 것입니다. 그래서 올바르게 수행하지 못하는 것을 더 잘 이해할 수 있습니까?

답변

2

정말로 매크로 코드를 추적해야하는 경우 유일한 방법은 매크로의 정의를 찾고 수동으로 매크로 코드 (매개 변수 대체)를 "호출"되는 위치에 "인스턴스화"한 다음 디버거에서 일반 코드로 추적하십시오.

스킬 레벨이 분해 된 코드를 원래 매크로 코드와 다시 연관시키는 데 충분하다면 대안 변형을 통해 분해를 수행 할 수 있습니다.

0

매크로에서 호출되는 함수로 들어갈 수 있지만 매크로 행 자체를 통해 실제로 단계를 밟을 수는 없습니다. 그리고 네 컴파일을 컴파일하면 - 매크로 정의를 찾을 수 있습니다 (MSVC 함수/클래스 브라우저를 사용하여 정의 된 부분을 찾을 수 있습니다. 아마도 일부 헤더 파일)

1

포인트 컴파일러에서 작업을 수행하기 때문에 매크로를 사용할 수 없습니다 매크로는 이미 확장되어 있습니다. 그러나 부터까지 매크로를 단계별로 처리 할 수 ​​있습니다. "단계"만 수행하면 실제로 매크로 내부의 모든 코드가 한 줄씩 확장 된 것처럼 처리됩니다. "step into"하는 경우 해당 매크로에서 작성된 모든 함수 호출로 이동합니다. 매크로가 충분히 작거나 잘 아는 경우에는 "맹목적 단계"를 수행 할 수 있습니다.

0

어셈블리 전문가가 아니더라도 어셈블리를 한 번에 C/C++ 코드로 쉽게 매핑 할 수 있습니다. - 릴리스 빌드). 다행히도 매크로는 그렇게 털이 없기 때문에 여기서는 그렇지 않습니다.

소스 코드가 없더라도 디버깅이 많이 발생하므로 일반적으로 소스와 디스 어셈블리를 함께 사용하는 것이 좋지 않습니다. 그리고 경험이 많지 않은 경우 얻을 수있는 좋은 경험입니다.

관련 문제