AfxDumpStack
현재 스택의 이미지를 생성 하려면이 전역 함수를 사용할 수 있습니다.
void AFXAPI AfxDumpStack(
DWORD dwTarget = AFX_STACK_DUMP_TARGET_DEFAULT
);
매개 변수
dwTarget
덤프 출력의 대상을 나타냅니다.가능한 값의 비트 OR (를 사용 하 여 조합할 수 있습니다**|**) 연산자는 다음과 같습니다:AFX_STACK_DUMP_TARGET_TRACE 보내는 방법으로 출력을 추적 매크로.추적 매크로 생성 출력 디버그 빌드에서 될 것입니다. 릴리스 빌드에 없음 출력을 생성합니다.또한, 추적 디버거 외에 다른 대상으로 리디렉션할 수 있습니다.
AFX_STACK_DUMP_TARGET_DEFAULT 보냅니다 덤프 출력에서 기본 대상입니다.이동은 디버그 출력의 추적 매크로.릴리스 빌드에서 출력을 클립보드로 이동합니다.
AFX_STACK_DUMP_TARGET_CLIPBOARD 는 클립보드에 출력을 보냅니다.으로 일반 텍스트를 사용 하 여 클립보드에 해당 데이터가 배치 되는 CF_TEXT 클립보드 형식입니다.
AFX_STACK_DUMP_TARGET_BOTH 보냅니다 클립보드 및 출력은 추적 매크로 동시에.
AFX_STACK_DUMP_TARGET_ODS 보내는 출력 직접 디버거를 통해 Win32 함수 OutputDebugString().이 옵션에 모두 디버그 디버거 출력 생성 및 릴리스 빌드 프로세스에 디버거가 연결 되어 있는 경우.AFX_STACK_DUMP_TARGET_ODS (연결 된 경우) 디버거를 항상 도달 및 리디렉션될 수 없습니다.
설명
아래 예제에서는 한 줄 전화에서 생성 된 출력을 반영 AfxDumpStack MFC 대화 상자 응용 프로그램에는 단추 처리기에서:
=== begin AfxDumpStack output ===
00427D55: DUMP2\DEBUG\DUMP2.EXE! void AfxDumpStack(unsigned long) + 181 bytes
0040160B: DUMP2\DEBUG\DUMP2.EXE! void CDump2Dlg::OnClipboard(void) + 14 bytes
0044F884: DUMP2\DEBUG\DUMP2.EXE! int _AfxDispatchCmdMsg(class CCmdTarget *,
unsigned int,int,void ( CCmdTarget::*)(void),void *,unsigned int,struct AFX_CMDHANDLE
0044FF7B: DUMP2\DEBUG\DUMP2.EXE! virtual int CCmdTarget::OnCmdMsg(unsigned
int,int,void *,struct AFX_CMDHANDLERINFO *) + 626 bytes
00450C71: DUMP2\DEBUG\DUMP2.EXE! virtual int CDialog::OnCmdMsg(unsigned
int,int,void *,struct AFX_CMDHANDLERINFO *) + 36 bytes
00455B27: DUMP2\DEBUG\DUMP2.EXE! virtual int CWnd::OnCommand(unsigned
int,long) + 312 bytes
00454D3D: DUMP2\DEBUG\DUMP2.EXE! virtual int CWnd::OnWndMsg(unsigned
int,unsigned int,long,long *) + 83 bytes
00454CC0: DUMP2\DEBUG\DUMP2.EXE! virtual long CWnd::WindowProc(unsigned
int,unsigned int,long) + 46 bytes
004528D9: DUMP2\DEBUG\DUMP2.EXE! long AfxCallWndProc(class CWnd *,struct
HWND__ *,unsigned int,unsigned int,long) + 237 bytes
00452D34: DUMP2\DEBUG\DUMP2.EXE! long AfxWndProc(struct HWND__ *,unsigned
int,unsigned int,long) + 129 bytes
BFF73663: WINDOWS\SYSTEM\KERNEL32.DLL! ThunkConnect32 + 2148 bytes
BFF928E0: WINDOWS\SYSTEM\KERNEL32.DLL! UTUnRegister + 2492 bytes
=== end AfxDumpStack() output ===
위의 출력에서 각 줄의 마지막 함수 호출을 함수 호출과 호출 함수 프로토타입을 포함 된 모듈의 전체 경로 이름 주소를 나타냅니다.함수 호출 스택에 있는 함수의 정확한 주소에서 일어나지 않으면, 바이트 오프셋 표시 됩니다.
예를 들어, 위의 출력의 첫 줄에 다음 표에 설명 되어:
Output |
설명 |
---|---|
00427D55: |
마지막 함수 호출의 반환 주소를 합니다. |
DUMP2\DEBUG\DUMP2.EXE! |
함수 호출을 포함 하는 모듈의 전체 경로 이름입니다. |
void AfxDumpStack(unsigned long) |
함수 프로토타입 호출 됩니다. |
+ 181 bytes |
함수 프로토타입의 주소에서 바이트 오프셋 (이 경우 void AfxDumpStack(unsigned long)) 반환 주소 (이 경우 00427D55). |
AfxDumpStackMFC 라이브러리의 디버그 빌드와 버전에서 사용할 수 있습니다. 그러나도 공유 DLL에서 MFC 실행 파일을 사용 하는 경우, 함수는 항상 정적으로 연결 되어 있습니다.공유 라이브러리 환경 구현 함수 mfcs42에 나와 있습니다.LIB 라이브러리 (및 그 변종)입니다.
이 함수를 제대로 사용 하려면:
IMAGEHLP 파일입니다.DLL 경로에 있어야 합니다.이 DLL이 없는 경우 함수는 오류 메시지가 표시 됩니다.참조 이미지 라이브러리 도움말 IMAGEHLP에 의해 제공 되는 함수 집합에 대 한 내용은.
스택에 있는 프레임 모듈 디버깅 정보를 포함 해야 합니다.디버깅 정보를 포함 하지 않는 경우 함수는 스택 추적을 계속 생성 합니다 있지만 추적 보다 자세히 설명 됩니다.
요구 사항
헤더: afx.h