IDiaLineNumber
Görüntü metni bloğundan kaynak dosya satırı numarasına eşleme işlemini açıklayan bilgilere erişir.
Sözdizimi
IDiaLineNumber : IUnknown
Vtable Sırasına Göre Yöntemler
Aşağıdaki tabloda yönteminin yöntemleri gösterilmektedir IDiaLineNumber
.
Metot | Açıklama |
---|---|
IDiaLineNumber::get_compiland | Görüntü metninin baytlarına katkıda bulunan compiland simgesine bir başvuru alır. |
IDiaLineNumber::get_sourceFile | Kaynak dosya nesnesine başvuru alır. |
IDiaLineNumber::get_lineNumber | Kaynak dosyadaki satır numarasını alır. |
IDiaLineNumber::get_lineNumberEnd | Deyimin veya ifadenin sona erdiği tek tabanlı kaynak satır numarasını alır. |
IDiaLineNumber::get_columnNumber | İfadenin veya deyimin başladığı sütun numarasını alır. |
IDiaLineNumber::get_columnNumberEnd | İfadenin veya deyimin sona erdiği sütun numarasını alır. |
IDiaLineNumber::get_addressSection | Bellek adresinin bir bloğun başladığı bölüm bölümünü alır. |
IDiaLineNumber::get_addressOffset | Bellek adresinin bir bloğun başladığı uzaklık bölümünü alır. |
IDiaLineNumber::get_relativeVirtualAddress | Bir bloğun görüntü göreli sanal adresini (RVA) alır. |
IDiaLineNumber::get_virtualAddress | Bir bloğun sanal adresini (VA) alır. |
IDiaLineNumber::get_length | Bir bloktaki bayt sayısını alır. |
IDiaLineNumber::get_sourceFileId | Bu satıra katkıda bulunan kaynak dosya için benzersiz bir kaynak dosya tanımlayıcısı alır. |
IDiaLineNumber::get_statement | Bu satır bilgilerinin program kaynağındaki bir deyimin başlangıcını açıklandığını belirten bir bayrak alır. |
IDiaLineNumber::get_compilandId | Bu satıra katkıda bulunan compiland için benzersiz tanımlayıcıyı alır. |
Açıklamalar
Arayanlar İçin Notlar
IDiaEnumLineNumbers::Item veya IDiaEnumLineNumbers::Next yöntemlerini çağırarak bu arabirimi alın.
Örnek
Aşağıdaki işlev, bir işlevde kullanılan satır numaralarını görüntüler (ile pSymbol
temsil edilir).
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;
}
}
}
}
}
Gereksinimler
Üst bilgi: Dia2.h
Kitaplık: diaguids.lib
DLL: msdia80.dll
Ayrıca bkz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin