Commit 5e1c0445 by Wenzel Jakob Committed by GitHub

include backtrace in pybind11::detail::error_string (#494)

parent 219b10ac
...@@ -127,6 +127,23 @@ PYBIND11_NOINLINE inline std::string error_string() { ...@@ -127,6 +127,23 @@ PYBIND11_NOINLINE inline std::string error_string() {
if (scope.value) if (scope.value)
errorString += (std::string) handle(scope.value).str(); 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::string>() +
"(" + std::to_string(lineno) + "): " +
handle(frame->f_code->co_name).cast<std::string>() + "\n";
frame = frame->f_back;
}
}
}
return errorString; return errorString;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment