IDiaLineNumber
이미지 텍스트의 바이트 블록에서 소스 파일 줄 번호로 매핑하는 프로세스를 설명하는 정보에 액세스합니다.
구문
IDiaLineNumber : IUnknown
Vtable 순서의 메서드
다음 표에서는 IDiaLineNumber
메서드를 보여 줍니다.
메서드 | 설명 |
---|---|
IDiaLineNumber::get_compiland | 이미지 텍스트의 바이트를 제공한 컴파일 대상 기호에 대한 참조를 검색합니다. |
IDiaLineNumber::get_sourceFile | 소스 파일 개체에 대한 참조를 검색합니다. |
IDiaLineNumber::get_lineNumber | 소스 파일에서 줄 번호를 검색합니다. |
IDiaLineNumber::get_lineNumberEnd | 문 또는 식이 끝나는 1 기반 소스 줄 번호를 검색합니다. |
IDiaLineNumber::get_columnNumber | 식 또는 문이 시작되는 열 번호를 검색합니다. |
IDiaLineNumber::get_columnNumberEnd | 식 또는 문이 끝나는 열 번호를 검색합니다. |
IDiaLineNumber::get_addressSection | 블록을 시작하는 메모리 주소의 섹션 부분을 검색합니다. |
IDiaLineNumber::get_addressOffset | 블록이 시작되는 메모리 주소의 오프셋 부분을 검색합니다. |
IDiaLineNumber::get_relativeVirtualAddress | 블록의 이미지 RVA(상대 가상 주소)를 검색합니다. |
IDiaLineNumber::get_virtualAddress | 블록의 VA(가상 주소)를 검색합니다. |
IDiaLineNumber::get_length | 블록의 바이트 수를 검색합니다. |
IDiaLineNumber::get_sourceFileId | 이 줄을 제공한 소스 파일의 고유한 소스 파일 식별자를 검색합니다. |
IDiaLineNumber::get_statement | 프로그램 소스에서 문의 시작 부분을 설명하는 이 줄 정보를 나타내는 플래그를 검색합니다. |
IDiaLineNumber::get_compilandId | 이 줄을 제공한 컴파일 대상의 고유 식별자를 검색합니다. |
설명
호출자 참고 사항
IDiaEnumLineNumbers:: Item 메서드 또는 IDiaEnumLineNumbers:: Next 메서드를 호출하여 이 인터페이스를 가져옵니다.
예시
다음 함수는 pSymbol
로 표현되는 함수에서 사용되는 줄 번호를 표시합니다.
void dumpFunctionLines( IDiaSymbol* pSymbol, IDiaSession* pSession )
{
ULONGLONG length = 0;
DWORD isect = 0;
DWORD offset = 0;
pSymbol->get_addressSection( &isect );
pSymbol->get_addressOffset( &offset );
pSymbol->get_length( &length );
if ( isect != 0 && length > 0 )
{
CComPtr< IDiaEnumLineNumbers > pLines;
if ( SUCCEEDED( pSession->findLinesByAddr(
isect,
offset,
static_cast<DWORD>( length ),
&pLines)
)
)
{
CComPtr< IDiaLineNumber > pLine;
DWORD celt = 0;
bool firstLine = true;
while ( SUCCEEDED( pLines->Next( 1, &pLine, &celt ) ) &&
celt == 1 )
{
DWORD offset;
DWORD seg;
DWORD linenum;
CComPtr< IDiaSymbol > pComp;
CComPtr< IDiaSourceFile > pSrc;
pLine->get_compiland( &pComp );
pLine->get_sourceFile( &pSrc );
pLine->get_addressSection( &seg );
pLine->get_addressOffset( &offset );
pLine->get_lineNumber( &linenum );
printf( "\tline %d at 0x%x:0x%x\n", linenum, seg, offset );
pLine = NULL;
if ( firstLine )
{
// sanity check
CComPtr< IDiaEnumLineNumbers > pLinesByLineNum;
if ( SUCCEEDED( pSession->findLinesByLinenum(
pComp,
pSrc,
linenum,
0,
&pLinesByLineNum)
)
)
{
CComPtr< IDiaLineNumber > pLine;
DWORD celt;
while ( SUCCEEDED( pLinesByLineNum->Next( 1, &pLine, &celt ) ) &&
celt == 1 )
{
DWORD offset;
DWORD seg;
DWORD linenum;
pLine->get_addressSection( &seg );
pLine->get_addressOffset( &offset );
pLine->get_lineNumber( &linenum );
printf( "\t\tfound line %d at 0x%x:0x%x\n", linenum, seg, offset );
pLine = NULL;
}
}
firstLine = false;
}
}
}
}
}
요구 사항
헤더: Dia2.h
라이브러리: diaguids.lib
DLL: msdia80.dll