summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManos Pitsidianakis <el13635@mail.ntua.gr>2019-05-26 02:39:38 +0300
committerManos Pitsidianakis <el13635@mail.ntua.gr>2019-06-10 19:40:50 +0300
commit865c9a6befcb644e5cb6455e85a805c551da9a74 (patch)
tree83d39a4b464d3bcc1c06babd426510cf07f0e5cc
parent6f7b3f20ded5a63c7615106415531f594acbf0d9 (diff)
add experimental gdb debug lib
-rw-r--r--.gdbinit35
-rw-r--r--Cargo.toml2
-rw-r--r--debug_printer/Cargo.toml16
-rw-r--r--debug_printer/src/lib.rs44
4 files changed, 96 insertions, 1 deletions
diff --git a/.gdbinit b/.gdbinit
index 713e1373..c649c379 100644
--- a/.gdbinit
+++ b/.gdbinit
@@ -5,3 +5,38 @@ break core::option::expect_failed::h4927e1fef06c4878
break core::panicking::panic
break libcore/panicking.rs:58
break libcore/result.rs:945
+set auto-load python-scripts
+break melib/src/mailbox/thread.rs:1010
+set print thread-events off
+
+#python
+#import os
+#import sys
+#
+#sys.path.insert(0, os.getcwd() + '/scripts/gdb_meli/')
+#import gdb
+#import gdb_meli
+#
+#print(gdb_meli.__file__)
+#
+#help(gdb_meli)
+##from gdb_meli import build_pretty_printer
+##print(gdb.objfiles()[0].filename)
+##gdb_meli.register_pretty_printer(gdb)
+##gdb.printing.register_pretty_printer(
+## gdb.current_objfile(),
+## gdb_meli.build_pretty_printer())
+#end
+python
+
+import sys, os
+
+sys.path.insert(0, os.getcwd() + '/scripts/gdb_meli/')
+
+
+import gdb_meli, gdb
+#gdb_meli.register_meli_printers(gdb)
+#gdb.printing.register_pretty_printer(
+# gdb.current_objfile(),
+# gdb_meli.build_meli_printer())
+end
diff --git a/Cargo.toml b/Cargo.toml
index a278c41a..552f8f2a 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -21,4 +21,4 @@ lto = true
debug = true
[workspace]
-members = ["melib", "ui"]
+members = ["melib", "ui", "debug_printer"]
diff --git a/debug_printer/Cargo.toml b/debug_printer/Cargo.toml
new file mode 100644
index 00000000..ae510a78
--- /dev/null
+++ b/debug_printer/Cargo.toml
@@ -0,0 +1,16 @@
+[package]
+name = "debug_printer"
+version = "0.0.1" #:version
+authors = []
+workspace = ".."
+
+[lib]
+name = "debugprinter"
+crate-type = ["dylib"]
+path = "src/lib.rs"
+
+
+[dependencies]
+libc = {version = "0.2.55", features = ["extra_traits",] }
+melib = { path = "../melib", version = "*" }
+ui = { path = "../ui", version = "*" }
diff --git a/debug_printer/src/lib.rs b/debug_printer/src/lib.rs
new file mode 100644
index 00000000..072f06c7
--- /dev/null
+++ b/debug_printer/src/lib.rs
@@ -0,0 +1,44 @@
+extern crate libc;
+extern crate melib;
+
+use melib::Envelope;
+use std::ffi::CString;
+use std::os::raw::c_char;
+
+#[no_mangle]
+pub extern "C" fn print_envelope(ptr: *const Envelope) -> *const c_char {
+ unsafe {
+ assert!(!ptr.is_null(), "Null pointer in print_envelope");
+ //println!("got addr {}", p as u64);
+ //unsafe { CString::new("blah".to_string()).unwrap().as_ptr() }
+ let s = CString::new(format!("{:?}", *ptr)).unwrap();
+ drop(ptr);
+ let p = s.as_ptr();
+ std::mem::forget(s);
+ p
+ }
+}
+
+#[no_mangle]
+pub extern "C" fn get_empty_envelope() -> *mut Envelope {
+ let mut ret = Envelope::default();
+ let ptr = std::ptr::NonNull::new(&mut ret as *mut Envelope)
+ .expect("Envelope::default() has a NULL pointer?");
+
+ let ptr = ptr.as_ptr();
+ std::mem::forget(ret);
+ ptr
+}
+
+#[no_mangle]
+pub extern "C" fn destroy_cstring(ptr: *mut c_char) {
+ unsafe {
+ let slice = CString::from_raw(ptr);
+ drop(slice);
+ }
+}
+
+#[no_mangle]
+pub extern "C" fn envelope_size() -> libc::size_t {
+ std::mem::size_of::<Envelope>()
+}