add experimental gdb debug lib
parent
6f7b3f20de
commit
865c9a6bef
35
.gdbinit
35
.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
|
||||
|
|
|
@ -21,4 +21,4 @@ lto = true
|
|||
debug = true
|
||||
|
||||
[workspace]
|
||||
members = ["melib", "ui"]
|
||||
members = ["melib", "ui", "debug_printer"]
|
||||
|
|
|
@ -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 = "*" }
|
|
@ -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>()
|
||||
}
|
Loading…
Reference in New Issue