起因:
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配置失败网络错误,可换网即可。