Cargo 功能
Cargo 除了創(chuàng)建工程以外還具備構(gòu)建(build)工程、運(yùn)行(run)工程等一系列功能份乒,構(gòu)建和運(yùn)行分別對(duì)應(yīng)以下命令:
cargo build
cargo run
VSCode 中配置 Rust 工程
Cargo 是一個(gè)不錯(cuò)的構(gòu)建工具恕汇,如果使 VSCode 與它相配合那么 VSCode 將會(huì)是一個(gè)十分便捷的開發(fā)環(huán)境。
在上一章中我們建立了 greeting 工程或辖,現(xiàn)在我們用 VSCode 打開 greeting 文件夾瘾英。
打開 greeting 之后,在里面新建一個(gè)新的文件夾 .vscode (注意 vscode 前面的點(diǎn)颂暇,如果有這個(gè)文件夾就不需要新建了)缺谴。在新建的 .vscode 文件夾里新建兩個(gè)文件 tasks.json 和 launch.json,文件內(nèi)容如下:
tasks.json 文件
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command":"cargo",
"args": ["build"]
}
]
}
launch.json 文件
{
"version": "0.2.0",
"configurations": [
{
"name": "(lldb) 啟動(dòng)",
"type": "cppdbg",
"preLaunchTask": "build",
"request": "launch",
"program": "${workspaceFolder}/target/debug/${workspaceFolderBasename}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "lldb"
}
]
}
launch.json 文件(mac m1)
使用 M1 M2 芯片的蘋果電腦, 還需要安裝 CodeLLDB 插件, 并在 lunch.json 中指定 targetArchitecture 為 arm64:
{
"version": "0.2.0",
"configurations": [
{
"name": "(lldb) 啟動(dòng)",
"type": "lldb",
"preLaunchTask": "build",
"request": "launch",
"program": "${workspaceFolder}/target/debug/${workspaceFolderBasename}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "lldb",
"targetArchitecture": "arm64"
}
]
}
項(xiàng)目調(diào)試
點(diǎn)擊 VSCode 左欄的 "運(yùn)行和調(diào)試"->啟動(dòng)耳鸯。
程序就會(huì)開始調(diào)試運(yùn)行了湿蛔。運(yùn)行輸出將出現(xiàn)在"調(diào)試控制臺(tái)"中:
在 VSCode 中調(diào)試 Rust
在要斷點(diǎn)的行號(hào)前Mark一下(行號(hào)的左側(cè)點(diǎn)擊紅點(diǎn)就可以設(shè)置斷點(diǎn),和其他編輯器的斷點(diǎn)方式一致)
啟動(dòng)后就會(huì)進(jìn)入斷點(diǎn)县爬,可以看到變量信息阳啥,也可以進(jìn)行步進(jìn)。
輸出結(jié)果到控制臺(tái)
Rust 輸出文字的方式主要有兩種:println!() 和 print!()捌省。這兩個(gè)"函數(shù)"都是向命令行輸出字符串的方法苫纤,區(qū)別僅在于前者會(huì)在輸出的最后附加輸出一個(gè)換行符。當(dāng)用這兩個(gè)"函數(shù)"輸出信息的時(shí)候,第一個(gè)參數(shù)是格式字符串卷拘,后面是一串可變參數(shù)喊废,對(duì)應(yīng)著格式字符串中的"占位符",這一點(diǎn)與 C 語言中的 printf 函數(shù)很相似栗弟。但是污筷,Rust 中格式字符串中的占位符不是 "% + 字母" 的形式,而是一對(duì) {}乍赫。
fn main() {
let name = "test project";
println!("Hello, world!{}",name);
}