IDiaLineNumber
Accède aux informations qui décrivent le processus du mappage d'un bloc d'octets de texte image à un numéro de ligne du fichier source.
IDiaLineNumber : IUnknown
méthodes en commande de Vtable
Le tableau suivant répertorie les méthodes d' IDiaLineNumber.
Méthode |
Description |
---|---|
Extrait une référence au symbole pour le module qui a fourni des octets de texte d'image. |
|
Extrait une référence à l'objet du fichier source. |
|
Récupère le numéro de ligne dans le fichier source. |
|
Récupère le numéro de ligne source de base 1 où l'instruction ou l'expression se termine. |
|
Récupère le numéro de colonne où l'expression ou l'instruction commence. |
|
Récupère le numéro de colonne où l'expression ou l'instruction se termine. |
|
Extrait la partie de la section de l'adresse mémoire où un bloc démarre. |
|
Extrait la partie d'offset de l'adresse mémoire où un bloc démarre. |
|
Récupère l'adresse virtuelle relative d'image (RVA) d'un bloc. |
|
Récupère l'adresse virtuelle (VA) d'un bloc. |
|
Récupère le nombre d'octets dans un bloc. |
|
Récupère un identificateur unique de fichier source pour le fichier source qui a fourni cette ligne. |
|
extrait une balise indiquant que ces informations de ligne décrivent le début d'une instruction dans la source de programme. |
|
Extrait l'identificateur unique pour le module qui a fourni cette ligne. |
Notes
Remarques pour les appelants
obtenez cette interface en appelant les méthodes d' IDiaEnumLineNumbers::Item ou d' 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
Référence
Autres ressources
Interfaces (Kit de développement logiciel de Debug Interface Access)