/// <summary> /// Static constructor initializing the demangling mechanisms. /// </summary> static Symbol() { if (!LibStdCppHelper.TryGetCxaDemangle(out CxaDemangle)) { Logger.Log(LogLevel.Warning, "Could not load demangling library. Symbols will not be demangled."); return; } }
/// <summary> /// Static constructor initializing the demangling mechanisms. /// </summary> static Symbol() { IntPtr library; if (!SharedLibraries.TryLoadLibrary(LibStdCppHelper.LibStdCppName, out library)) { var libstdPath = LibStdCppHelper.GetLibStdCppPath(); if (!SharedLibraries.TryLoadLibrary(libstdPath, out library)) { Logger.Log(LogLevel.Warning, "Could not load demangling library. Symbols will not be demangled."); return; } } var address = SharedLibraries.GetSymbolAddress(library, "__cxa_demangle"); var delegateType = typeof(LibStdCppHelper.CxaDemangleDelegate); var callback = (LibStdCppHelper.CxaDemangleDelegate)Marshal.GetDelegateForFunctionPointer(address, delegateType); CxaDemangle = callback; }