rbpf-cli: capture log

This commit is contained in:
Richard Patel 2022-06-18 10:11:11 +01:00 committed by Dmitri Makarov
parent 857be1e237
commit 2fc888d864
1 changed files with 31 additions and 18 deletions

View File

@ -304,24 +304,6 @@ native machine code before execting it in the virtual machine.",
};
let duration = Instant::now() - start_time;
let output = Output {
result: format!("{:?}", result),
instruction_count: vm.get_total_instruction_count(),
execution_time: duration,
};
match matches.value_of("output_format") {
Some("json") => {
println!("{}", serde_json::to_string_pretty(&output).unwrap());
}
Some("json-compact") => {
println!("{}", serde_json::to_string(&output).unwrap());
}
_ => {
println!("Program output:");
println!("{:?}", output);
}
}
if matches.is_present("trace") {
eprintln!("Trace is saved in trace.out");
let mut file = File::create("trace.out").unwrap();
@ -339,6 +321,33 @@ native machine code before execting it in the virtual machine.",
.visualize_graphically(&mut file, Some(&dynamic_analysis))
.unwrap();
}
let instruction_count = vm.get_total_instruction_count();
drop(vm);
let output = Output {
result: format!("{:?}", result),
instruction_count,
execution_time: duration,
log: invoke_context
.get_log_collector()
.unwrap()
.borrow()
.get_recorded_content()
.to_vec(),
};
match matches.value_of("output_format") {
Some("json") => {
println!("{}", serde_json::to_string_pretty(&output).unwrap());
}
Some("json-compact") => {
println!("{}", serde_json::to_string(&output).unwrap());
}
_ => {
println!("Program output:");
println!("{:?}", output);
}
}
}
#[derive(Serialize)]
@ -346,6 +355,7 @@ struct Output {
result: String,
instruction_count: u64,
execution_time: Duration,
log: Vec<String>,
}
impl Debug for Output {
@ -353,6 +363,9 @@ impl Debug for Output {
writeln!(f, "Result: {}", self.result)?;
writeln!(f, "Instruction Count: {}", self.instruction_count)?;
writeln!(f, "Execution time: {} us", self.execution_time.as_micros())?;
for line in &self.log {
writeln!(f, "{}", line)?;
}
Ok(())
}
}