IDiaLineNumber
Accède aux informations qui décrivent le processus de mappage d’un bloc d’octets de texte d’image à un numéro de ligne de fichier source.
Syntaxe
IDiaLineNumber : IUnknown
Méthodes dans l'ordre Vtable
Le tableau suivant présente les méthodes de IDiaLineNumber
.
Méthode | Description |
---|---|
IDiaLineNumber::get_compiland | Récupère une référence au symbole pour le compiland qui a contribué aux octets du texte d’image. |
IDiaLineNumber::get_sourceFile | Récupère une référence à l’objet de fichier source. |
IDiaLineNumber::get_lineNumber | Récupère le numéro de ligne dans le fichier source. |
IDiaLineNumber::get_lineNumberEnd | Récupère le numéro de ligne source basé sur un où se termine l’instruction ou l’expression. |
IDiaLineNumber::get_columnNumber | Récupère le numéro de colonne où commence l’expression ou l’instruction. |
IDiaLineNumber::get_columnNumberEnd | Récupère le numéro de colonne où se termine l’expression ou l’instruction. |
IDiaLineNumber::get_addressSection | Récupère la partie section de l’adresse mémoire où commence un bloc. |
IDiaLineNumber::get_addressOffset | Récupère la partie décalage de l’adresse mémoire où commence un bloc. |
IDiaLineNumber::get_relativeVirtualAddress | Récupère l’adresse virtuelle relative (RVA) d’image d’un bloc. |
IDiaLineNumber::get_virtualAddress | Récupère l’adresse virtuelle (VA) d’un bloc. |
IDiaLineNumber::get_length | Récupère le nombre d’octets dans un bloc. |
IDiaLineNumber::get_sourceFileId | Récupère un identificateur de fichier source unique pour le fichier source qui a contribué à cette ligne. |
IDiaLineNumber::get_statement | Récupère un indicateur spécifiant que ces informations de ligne décrivent le début d’une instruction dans la source du programme. |
IDiaLineNumber::get_compilandId | Récupère l’identificateur unique du compiland qui a contribué à cette ligne. |
Notes
Remarques pour les appelants
Pour obtenir cette interface, appelez les méthodes IDiaEnumLineNumbers::Item ou IDiaEnumLineNumbers::Next.
Exemple
La fonction suivante affiche les numéros de ligne utilisés dans une fonction (représentée par 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;
}
}
}
}
}
Configuration requise
En-tête : Dia2.h
Bibliothèque : diaguids.lib
DLL : msdia80.dll