From 5e1c0445cfe0ec563d62ba87e3e9b1d20e863033 Mon Sep 17 00:00:00 2001 From: Wenzel Jakob Date: Sat, 12 Nov 2016 16:57:30 +0900 Subject: [PATCH] include backtrace in pybind11::detail::error_string (#494) --- include/pybind11/cast.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/include/pybind11/cast.h b/include/pybind11/cast.h index ddc1890c1..adf7ea99f 100644 --- a/include/pybind11/cast.h +++ b/include/pybind11/cast.h @@ -127,6 +127,23 @@ PYBIND11_NOINLINE inline std::string error_string() { if (scope.value) errorString += (std::string) handle(scope.value).str(); + PyErr_NormalizeException(&scope.type, &scope.value, &scope.trace); + + if (scope.trace) { + PyFrameObject *frame = ((PyTracebackObject *) scope.trace)->tb_frame; + if (frame) { + errorString += "\n\nAt:\n"; + while (frame) { + int lineno = PyFrame_GetLineNumber(frame); + errorString += + " " + handle(frame->f_code->co_filename).cast() + + "(" + std::to_string(lineno) + "): " + + handle(frame->f_code->co_name).cast() + "\n"; + frame = frame->f_back; + } + } + } + return errorString; }