IDiaDataSourceEx::loadDataForExeEx
선택적 레코드 프리페치를 사용하여 .exe/.dll 파일과 연결된 디버그 데이터를 열고 준비합니다.
구문
HRESULT loadDataForExeEx (
LPCOLESTR executable,
LPCOLESTR searchPath,
IUnknown* pCallback,
BOOL fPdbPrefetching
);
매개 변수
executable
[in] .exe 또는 .dll 파일의 경로입니다.
searchPath
[in] 디버그 데이터를 검색할 대체 경로입니다. 여러 경로는 세미콜론으로 구분되어야 합니다. 경로에 후행이 포함될 수 있습니다 \
.
pCallback
[in] IUnknown
디버그 콜백 인터페이스(예: IDiaLoadCallback
, , IDiaLoadCallback2
및/또는 인터페이스)를 지원하는 개체의 IDiaReadExeAtOffsetCallback
IDiaReadExeAtRVACallback
인터페이스입니다.
fPdbPrefetching
[in] 이 값으로 TRUE
설정하면 인접한 디버그 레코드가 메모리에 프리페치되어 잠재적으로 더 작은 파일 I/O 작업이 더 적고 더 큰 작업으로 대체되므로 메모리 사용량이 증가할 가능성이 있으므로 해당 레코드에 액세스할 때 전반적인 처리량이 향상됩니다. 로 FALSE
설정하면 다음과 동일하게 IDiaDataSource::loadDataForExe
동작합니다. 다른 값으로 설정하면 동작이 지정되지 않습니다.
Return Value
성공하면 S_OK
를 반환하고, 실패하면 오류 코드를 반환합니다. 다음 표에서는 이 메서드에 대해 가능한 오류 코드 중 일부를 보여 줍니다.
값 | 설명 |
---|---|
E_PDB_NOT_FOUND |
파일을 열지 못했거나 파일 형식이 잘못되었습니다. |
E_PDB_FORMAT |
사용되지 않는 형식의 파일에 액세스하려고 했습니다. |
E_PDB_INVALID_SIG |
시그니처가 일치하지 않습니다. |
E_PDB_INVALID_AGE |
보존 기간이 일치하지 않습니다. |
E_INVALIDARG |
잘못된 매개 변수입니다. |
E_UNEXPECTED |
데이터 소스가 이미 준비되었습니다. |
설명
.exe/.dll 파일의 디버그 헤더는 연결된 디버그 데이터 위치의 이름을 지정합니다.
기호 서버 에서 디버그 데이터를 로드하는 경우 symsrv.dll 사용자의 애플리케이션 또는 msdia140.dll 설치되어 있거나 시스템 디렉터리에 있어야 하는 동일한 디렉터리에 있어야 합니다.
이 메서드는 디버그 헤더를 읽은 다음, 디버그 데이터를 검색하고 준비합니다. 필요에 따라 콜백을 통해 검색 진행 상황을 보고하고 제어할 수 있습니다. 예를 들어 메서드가 IDiaLoadCallback::NotifyDebugDir
디버그 디렉터리를 찾아서 처리할 때 IDiaDataSourceEx::loadDataForExeEx
호출됩니다.
IDiaReadExeAtOffsetCallback
및 IDiaReadExeAtRVACallback
인터페이스를 사용하면 표준 파일 I/O를 통해 파일에 직접 액세스할 수 없는 경우 클라이언트 애플리케이션에서 실행 파일에서 데이터를 읽는 대체 방법을 제공할 수 있습니다.
유효성 검사 없이 .pdb 파일을 로드하려면 이 메서드를 IDiaDataSourceEx::loadDataFromPdbEx
사용합니다.
특정 조건에 대해 .pdb 파일의 유효성을 검사하려면 이 메서드를 IDiaDataSourceEx::loadAndValidateDataFromPdbEx
사용합니다.
메모리에서 직접 .pdb 파일을 로드하려면 이 메서드를 IDiaDataSourceEx::loadDataFromIStreamEx
사용합니다.
로드하지 않고 .pdb 파일의 유효성을 검사하려면 이 메서드를 IDiaDataSourceEx::ValidatePdb
사용합니다.
예시
class MyCallBack: public IDiaLoadCallback
{
...
};
MyCallBack callback;
...
HRESULT hr = pSource->loadDataForExeEx( L"myprog.exe", L".\debug", (IUnknown*)&callback, TRUE);
if (FAILED(hr))
{
// Report error
}