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::() +}