Convert Symbol in Klassenname :: Function (Para1, Para2)
-
28-09-2019 - |
Frage
Ich bin mit der GNU-Erweiterung „char** backtrace_symbols(void *buffer, int size)
“, um das Stack-Trace zu erhalten, wenn eine Ausnahme ausgelöst wird. Gibt es eine Bibliothek-Funktion, die das Symbol in einen „Menschen lesbar“ string konvertiert - den Namen Mangeln wiederholen
Wenn nicht, würde ich meine eigene Funktion nach diesem Wiki Artikeln schreiben.
Beton:
Input: test.exe(_ZN10CTLTestApp12ExecuteGroupEPK19CTLTestCaseRegisterNS_11EReportTypeE+0x24c)
Output: test.exe CTLTestApp::ExecuteGroup( CTLTestCaseRegister, EReportType )
Vielen Dank,
Charly
Lösung
#include <cxxabi.h>
#include <iostream>
#include <cstdlib>
int main() {
int status;
const std::string name = "_ZN10CTLTestApp12ExecuteGroupEPK19CTLTestCaseRegisterNS_11EReportTypeE";
char *realname = abi::__cxa_demangle(name.c_str(), 0, 0, &status);
std::cout << realname << "(" << status << ")" << std::endl;
free(realname);
}
Laufen gibt:
CTLTestApp::ExecuteGroup(CTLTestCaseRegister const*, CTLTestApp::EReportType)(0)
Sehen Sie die Online- Dokumentation für ein vollständigeres Beispiel und weitere Details zu diesem Thema.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow