changeset 43251:970978975574

rust-utils: introduce a debug util to print the python stack trace Differential Revision: https://phab.mercurial-scm.org/D7057
author Raphaël Gomès <rgomes@octobus.net>
date Mon, 07 Oct 2019 23:17:44 +0200
parents 98d996a138de
children 32187ae9eeb3
files rust/hg-cpython/src/lib.rs rust/hg-cpython/src/utils.rs
diffstat 2 files changed, 14 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/rust/hg-cpython/src/lib.rs	Wed Oct 16 17:16:23 2019 +0300
+++ b/rust/hg-cpython/src/lib.rs	Mon Oct 07 23:17:44 2019 +0200
@@ -35,6 +35,7 @@
 pub mod exceptions;
 pub mod filepatterns;
 pub mod parsers;
+pub mod utils;
 
 py_module_initializer!(rustext, initrustext, PyInit_rustext, |py, m| {
     m.add(
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/hg-cpython/src/utils.rs	Mon Oct 07 23:17:44 2019 +0200
@@ -0,0 +1,13 @@
+use cpython::{PyDict, PyObject, PyResult, PyTuple, Python};
+
+#[allow(unused)]
+pub fn print_python_trace(py: Python) -> PyResult<PyObject> {
+    eprintln!("===============================");
+    eprintln!("Printing Python stack from Rust");
+    eprintln!("===============================");
+    let traceback = py.import("traceback")?;
+    let sys = py.import("sys")?;
+    let kwargs = PyDict::new(py);
+    kwargs.set_item(py, "file", sys.get(py, "stderr")?)?;
+    traceback.call(py, "print_stack", PyTuple::new(py, &[]), Some(&kwargs))
+}