MileStone 7, All required parts done

This commit is contained in:
ridethepig 2023-03-07 15:35:50 +08:00
parent e82503703a
commit f944d66c93

View File

@ -34,6 +34,10 @@ fn parse_address(addr: &str) -> Option<usize> {
usize::from_str_radix(addr_without_0x, 16).ok()
}
fn parse_lineno(lineno: &str) -> Option<usize> {
usize::from_str_radix(lineno, 10).ok()
}
impl Debugger {
/// Initializes the debugger.
pub fn new(target: &str) -> Debugger {
@ -48,7 +52,7 @@ impl Debugger {
std::process::exit(1);
}
};
debug_data.print();
// debug_data.print();
let history_path = format!("{}/.deet_history", std::env::var("HOME").unwrap());
let mut readline = Editor::<()>::new();
@ -118,7 +122,8 @@ impl Debugger {
.inferior
.as_mut()
.unwrap()
.write_byte(target_addr, orig_byte).unwrap();
.write_byte(target_addr, orig_byte)
.unwrap();
assert_eq!(break_0xcc, 0xcc);
self.inferior
.as_mut()
@ -235,6 +240,33 @@ impl Debugger {
} else {
eprintln!("Unable to parse breakpoint \"{}\"", arg_string);
}
} else if let Some(line_no) = parse_lineno(arg_str) {
if let Some(addr) = self.debug_data.get_addr_for_line(None, line_no) {
println!(
"Set breakpoint {} at {}({:#x})",
self.breakpoint_vec.len(),
arg_string,
addr
);
self.breakpoint_vec.push(addr);
self._install_breakpoint(addr);
} else {
eprintln!("Unable to parse breakpoint \"{}\"", arg_string);
}
} else {
if let Some(addr) = self.debug_data.get_addr_for_function(None, &arg_string)
{
println!(
"Set breakpoint {} at {}({:#x})",
self.breakpoint_vec.len(),
arg_string,
addr
);
self.breakpoint_vec.push(addr);
self._install_breakpoint(addr);
} else {
eprintln!("Unable to parse breakpoint \"{}\"", arg_string);
}
}
}
}