기호 로드

기호 처리기는 fInvadeProcess 매개 변수가 TRUE로 설정된 SymInitialize 함수를 호출하거나 SymLoadModuleEx 함수를 호출하여 모듈을 지정할 때 기호를 로드합니다. 두 경우 모두 기호 처리기는 SymSetOptions 함수에서 설정한 옵션에 따라 기호가 요청될 때까지 기호를 로드하거나 기호 로드를 연기합니다.

기호 처리기를 사용하여 모든 모듈에 대한 기호 정보를 검색할 수 있습니다. SymInitialize 호출에 지정된 프로세스와 연결할 필요가 없습니다. 임의의 모듈을 사용하려면 ImageName 매개 변수에서 모듈 이미지의 전체 경로를 지정합니다. 디버깅 정보(.exe, .dll, .drv, .sys, .scr, .cpl 또는.com)가 있는 실행 가능한 모듈의 경로를 사용할 수 있습니다. BaseOfDll 매개 변수를 사용하여 로드 주소를 지정하면 기호 주소는 해당 주소를 기반으로 합니다.

애플리케이션 기간 동안 기호 모듈을 로드할 필요가 없을 수 있습니다. 기호 처리기의 모듈 목록에서 기호 모듈을 해제하려면 SymUnloadModule64 함수를 사용합니다. 이 함수는 기호 모듈에 할당된 메모리를 해제합니다. 해당 모듈의 기호를 다시 사용하려면 지연된 기호 로드 옵션이 설정된 경우에도 SymLoadModuleEx 함수를 호출해야 합니다.

기호 로드 문제 진단

기호를 로드하려는 모든 시도를 보려면 SYMOPT_DEBUG로 SymSetOptions를 호출합니다 . 이로 인해 DbgHelp는 검색 중인 디렉터리 및 오류 메시지와 같은 기호 검색에 대한 자세한 정보를 사용하여 OutputDebugString 함수를 호출합니다. 코드에서 SymRegisterCallback64를 사용하는 경우 DbgHelp은 OutputDebugString을 호출하는 대신 콜백 함수를 호출합니다. ActionCode 매개 변수는 CBA_DEBUG_INFO로 설정되고 CallbackData 매개 변수는 표시할 수 있는 문자열입니다.

소스 코드를 변경하지 않고 이 디버그 출력을 콘솔에 표시하려면 SymInitialize 함수를 호출하기 전에 DBGHELP_DBGOUT 환경 변수를 NULL이 아닌 값으로 설정합니다. 정보를 파일에 기록하려면 DBGHELP_LOG 환경 변수를 사용할 로그 파일의 이름으로 설정합니다.

이러한 기능은 필요한 경우에만 사용해야 합니다. 많은 기호가 포함된 모듈의 기호 로드 속도가 느려질 수 있습니다.