Rust-命令行参数

起因:

main方法断点不走。下面代码的在main方法里面第一行let前打断点,不走,之后的断点也都没走,直接报错error: the following required arguments were not provided:<EVENT>

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let settings::Settings {
        event_id,
        symbolicator_config,
        output_format,
        mode,
    } = settings::Settings::get()?;
...
}
原因:

let行是左值表达式,setting行是右值表达式,先走了setting行,然后在setting行里面get方法里面有个Cli::parse()方法,该方法是用来解析命令行参数的,在这个地方缺少固定参数event报错了,导致main方法里面第一行let行没走到。

1、rust命令行参数使用

// 三方库:clap = { version = "4.0.25", features = ["derive"] },用struct按顺序解析命令行参数
use clap::{Parser};

#[derive(Clone, Parser, Debug)]
struct Cli {
    pub event: String,//固定参数

    #[arg(long, short)] //选项参数,短选项和长选项
    pub org: Option<String>, //可选参数

    #[arg(long = "auth-token")]
    pub auth_token: Option<String>,

    #[arg(long)]
    offline: bool,
}
#[tokio::main]
async fn main() {
    let cli = Cli::parse();
}

2、命令行参数调试

选中vscode左侧导航栏第4个:运行和调试,添加配置,选择codelldb:launch,设置完的launch.json如下

        {
            "type": "lldb",
            "request": "launch",
            "name": "CmdTest",
            "program": "${workspaceFolder}/target/debug/${workspaceFolderBasename}",
            "args": ["arg1"],
            "cwd": "${workspaceFolder}"
        }

在args中填入命令行后携带参数即可,双引号。(eg:"arg1")。然后可以运行测试结果,也可用cargo build出可执行文件直接调用可执行文件测试,注意可执行文件后面的参数要加单引号,双引号和不加都会无效。
若出现codelldb配置失败网络错误,可换网即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容