Skip to content

Commit 03110c4

Browse files
committed
show source locations in windows backtraces
(cherry picked from commit 26d6195)
1 parent addcf3c commit 03110c4

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

src/app/main.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,15 +262,26 @@ static void dumpBacktrace( unsigned int depth )
262262
SYMBOL_INFO *symbol = ( SYMBOL_INFO * ) qgsMalloc( sizeof( SYMBOL_INFO ) + 256 );
263263
symbol->MaxNameLen = 255;
264264
symbol->SizeOfStruct = sizeof( SYMBOL_INFO );
265+
IMAGEHLP_LINE *line = ( IMAGEHLP_LINE * ) qgsMalloc( sizeof( IMAGEHLP_LINE ) );
266+
line->SizeOfStruct = sizeof( IMAGEHLP_LINE );
265267

266268
for ( int i = 0; i < nFrames; i++ )
267269
{
270+
DWORD dwDisplacement;
268271
SymFromAddr( GetCurrentProcess(), ( DWORD64 )( buffer[ i ] ), 0, symbol );
269272
symbol->Name[ 255 ] = 0;
270-
myPrint( "%d: %s [%x]\n", i, symbol->Name, symbol->Address );
273+
if ( SymGetLineFromAddr( GetCurrentProcess(), ( DWORD64 )( buffer[i] ), &dwDisplacement, line ) )
274+
{
275+
myPrint( "%s(%d) : (%s) frame %d, address %x\n", line->FileName, line->LineNumber, symbol->Name, i, symbol->Address );
276+
}
277+
else
278+
{
279+
myPrint( "%s(%d) : (%s) unknown source location, frame %d, address %x [GetLastError()=%d]\n", __FILE__, __LINE__, symbol->Name, i, symbol->Address, GetLastError() );
280+
}
271281
}
272282

273283
qgsFree( symbol );
284+
qgsFree( line );
274285
#else
275286
Q_UNUSED( depth );
276287
#endif

0 commit comments

Comments
 (0)