Improved C++ demangling.
This commit is contained in:
@@ -1052,6 +1052,36 @@ long VDDebugInfoLookupRVA(VDDebugInfoContext *pctx, unsigned rva, char *buf, int
|
|||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
#include "dbghelp.h"
|
||||||
|
#pragma comment(lib, "dbghelp.lib")
|
||||||
|
|
||||||
|
static const char *Demangle( const char *buf )
|
||||||
|
{
|
||||||
|
static bool initted = false;
|
||||||
|
if( !initted )
|
||||||
|
{
|
||||||
|
SymSetOptions( SYMOPT_UNDNAME | SYMOPT_DEFERRED_LOADS );
|
||||||
|
|
||||||
|
if (!SymInitialize(GetCurrentProcess(), NULL, TRUE))
|
||||||
|
return buf;
|
||||||
|
|
||||||
|
initted = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char obuf[1024];
|
||||||
|
|
||||||
|
if( !UnDecorateSymbolName(buf, obuf, sizeof(obuf),
|
||||||
|
UNDNAME_COMPLETE
|
||||||
|
| UNDNAME_NO_CV_THISTYPE
|
||||||
|
| UNDNAME_NO_ALLOCATION_MODEL
|
||||||
|
| UNDNAME_NO_ACCESS_SPECIFIERS // no public:
|
||||||
|
| UNDNAME_NO_MS_KEYWORDS // no __cdecl
|
||||||
|
) )
|
||||||
|
{
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
return obuf;
|
||||||
|
}
|
||||||
|
|
||||||
static bool ReportCrashCallStack(HWND hwnd, HANDLE hFile, const EXCEPTION_POINTERS *const pExc)
|
static bool ReportCrashCallStack(HWND hwnd, HANDLE hFile, const EXCEPTION_POINTERS *const pExc)
|
||||||
{
|
{
|
||||||
@@ -1117,7 +1147,7 @@ static bool ReportCrashCallStack(HWND hwnd, HANDLE hFile, const EXCEPTION_POINTE
|
|||||||
|
|
||||||
if (fValid) {
|
if (fValid) {
|
||||||
if (VDDebugInfoLookupRVA(&g_debugInfo, data, buf, sizeof buf) >= 0) {
|
if (VDDebugInfoLookupRVA(&g_debugInfo, data, buf, sizeof buf) >= 0) {
|
||||||
Report(hwnd, hFile, "%08lx: %s()", data, buf);
|
Report(hwnd, hFile, "%08lx: %s", data, Demangle(buf));
|
||||||
--limit;
|
--limit;
|
||||||
} else {
|
} else {
|
||||||
ModuleInfo *pMods = pModules;
|
ModuleInfo *pMods = pModules;
|
||||||
|
|||||||
Reference in New Issue
Block a user