mirror of
https://github.com/SpaceManiac/SpacemanDMM.git
synced 2025-12-23 05:36:47 +00:00
Add Disassemble request in case VSC ever supports it
This commit is contained in:
parent
a42929c12e
commit
b45d07e658
1 changed files with 31 additions and 0 deletions
|
|
@ -314,6 +314,7 @@ handle_request! {
|
|||
supportsExceptionInfoRequest: Some(true),
|
||||
supportsConfigurationDoneRequest: Some(true),
|
||||
supportsFunctionBreakpoints: Some(true),
|
||||
supportsDisassembleRequest: Some(true),
|
||||
exceptionBreakpointFilters: Some(vec![
|
||||
ExceptionBreakpointsFilter {
|
||||
filter: EXCEPTION_FILTER_RUNTIMES.to_owned(),
|
||||
|
|
@ -535,6 +536,7 @@ handle_request! {
|
|||
let mut dap_frame = StackFrame {
|
||||
name: ex_frame.proc.clone(),
|
||||
id: i as i64,
|
||||
instructionPointerReference: Some(format!("{}@{}#{}", ex_frame.proc, ex_frame.override_id, ex_frame.offset)),
|
||||
.. Default::default()
|
||||
};
|
||||
|
||||
|
|
@ -774,6 +776,35 @@ handle_request! {
|
|||
on Evaluate(&mut self, params) {
|
||||
self.evaluate(params)?
|
||||
}
|
||||
|
||||
on Disassemble(&mut self, params) {
|
||||
guard!(let Some(captures) = MEMORY_REFERENCE_REGEX.captures(¶ms.memoryReference) else {
|
||||
return Err(Box::new(GenericError("Invalid memory reference")));
|
||||
});
|
||||
let proc = &captures[1];
|
||||
let override_id: usize = captures[2].parse()?;
|
||||
//let offset: i64 = captures[3].parse()?;
|
||||
|
||||
let extools = self.extools.get()?;
|
||||
let mut result = Vec::new();
|
||||
for instr in extools.bytecode(proc, override_id) {
|
||||
result.push(DisassembledInstruction {
|
||||
address: format!("{}#{}@{}", proc, override_id, instr.offset),
|
||||
instructionBytes: Some(instr.bytes.clone()),
|
||||
instruction: format!("{} {}", instr.mnemonic, instr.comment),
|
||||
.. Default::default()
|
||||
});
|
||||
}
|
||||
|
||||
DisassembleResponse {
|
||||
instructions: result
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
lazy_static! {
|
||||
// `/proc#override@offset`
|
||||
static ref MEMORY_REFERENCE_REGEX: regex::Regex = regex::Regex::new(r"^([^#]+)#(\d+)@(\d+)$").unwrap();
|
||||
}
|
||||
|
||||
#[derive(Default, Debug)]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue