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

War es hilfreich?

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
scroll top