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
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour