From 28127850aa55377f6899ae2ac1f124daeefacfab Mon Sep 17 00:00:00 2001 From: fgh1999 Date: Wed, 20 Mar 2024 18:06:28 +0000 Subject: [PATCH] Add debug subcommand in OSDK --- osdk/README.md | 1 + osdk/src/cli.rs | 8 ++++++-- osdk/src/commands/debug.rs | 9 +++------ osdk/src/config_manager/mod.rs | 7 +++---- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/osdk/README.md b/osdk/README.md index 47c218f1..75ae9faa 100644 --- a/osdk/README.md +++ b/osdk/README.md @@ -76,6 +76,7 @@ Currently we support following commands: - **new**: Create a new kernel package or library package - **build**: Compile the project and its dependencies - **run**: Run the kernel with a VMM +- **debug**: Debug a remote target via GDB - **test**: Execute kernel mode unit test by starting a VMM - **check**: Analyze the current package and report errors - **clippy**: Check the current package and catch common mistakes diff --git a/osdk/src/cli.rs b/osdk/src/cli.rs index 534a9dde..d7c07d47 100644 --- a/osdk/src/cli.rs +++ b/osdk/src/cli.rs @@ -131,8 +131,12 @@ pub struct DebugArgs { pub cargo_args: CargoArgs, #[command(flatten)] pub osdk_args: OsdkArgs, - #[arg(name = "ROLE", help = "'client' or 'server'", default_value = "server")] - pub role: String, + #[arg( + long, + help = "Specify the address of the remote target", + default_value = ".aster-gdb-socket" + )] + pub remote: String, } #[derive(Debug, Parser)] diff --git a/osdk/src/commands/debug.rs b/osdk/src/commands/debug.rs index 9b197fc7..6caab1e4 100644 --- a/osdk/src/commands/debug.rs +++ b/osdk/src/commands/debug.rs @@ -7,22 +7,19 @@ use crate::util::get_target_directory; use std::process::Command; pub fn execute_debug_command(config: &DebugConfig) { - let DebugConfig { - manifest, - cargo_args, - } = config; + let DebugConfig { cargo_args, remote } = config; let profile = profile_adapter(&cargo_args.profile); let file_path = get_target_directory() .join("x86_64-unknown-none") .join(profile) .join(bin_file_name()); - println!("Debugging {:?}", file_path); + println!("Debugging {}", file_path.display()); let mut gdb = Command::new("gdb"); gdb.args([ "-ex", - "target remote :1234", + format!("target remote {}", remote).as_str(), "-ex", format!("file {}", file_path.display()).as_str(), ]); diff --git a/osdk/src/config_manager/mod.rs b/osdk/src/config_manager/mod.rs index 67c5d3df..496be33b 100644 --- a/osdk/src/config_manager/mod.rs +++ b/osdk/src/config_manager/mod.rs @@ -76,16 +76,15 @@ impl RunConfig { #[derive(Debug)] pub struct DebugConfig { - pub manifest: OsdkManifest, pub cargo_args: CargoArgs, + pub remote: String, } impl DebugConfig { pub fn parse(args: &DebugArgs) -> Self { - let cargo_args = split_features(&args.cargo_args); Self { - manifest: get_final_manifest(&cargo_args, &args.osdk_args), - cargo_args, + cargo_args: split_features(&args.cargo_args), + remote: args.remote.clone(), } } }