标签: rust-cargo

如何在GDB中调试失败的货物测试?

我有一个失败的货物测试:

$ cargo test
[snip]
    Running target/gunzip-c62d8688496249d8

running 2 tests
test test_extract_failure ... FAILED
test test_extract_success ... ok

failures:

---- test_extract_failure stdout ----
        task 'test_extract_failure' panicked at 'assertion failed: result.is_err()', /home/dhardy/other/flate2-rs/tests/gunzip.rs:19



failures:
    test_extract_failure

test result: FAILED. 1 passed; 1 failed; 0 ignored; 0 measured

task '<main>' panicked at 'Some tests failed', /home/rustbuild/src/rust-buildbot/slave/nightly-linux/build/src/libtest/lib.rs:250
Run Code Online (Sandbox Code Playgroud)

如何在GDB之类的调试器中启动失败测试?

这应该是一个普遍的问题,但对于那些想要回溯我的步骤的人来说,安装一个最近的每晚Rust构建和:

git clone https://github.com/dhardy/flate2-rs.git
git checkout 24979640a880
cd flate2-rs
cargo test
Run Code Online (Sandbox Code Playgroud)

gdb rust rust-cargo

30
推荐指数
1
解决办法
6811
查看次数

如何从函数返回当前工作目录?

具有高级编程语言的经验。我读了 Rust 这本书,现在试图生存并理解 Rust 中的“事物”是如何工作的。我希望有人解释一下到底是什么 - Ok(()) 以及如何处理它?我的目标是将函数的结果返回到输出的变量:

    Finished dev [unoptimized + debuginfo] target(s) in 0.01s
     Running `target/debug/rcp ./file/ aba`
Ok(
    "/home/tomand/rcp",
)
Run Code Online (Sandbox Code Playgroud)

这是完整的代码:

use std::fs;
use std::env;
use serde_json;
use regex::Regex;
use std::path::Path;

fn determinate_file_size(file: &str) -> u64 {
    fs::metadata(file).unwrap().len()
}

fn determinate_is_it_file_or_dirctory(arg: &str) -> &str {
    let file = "File";
    let dir = "Directory";
    let re = Regex::new(r"/").unwrap();
    if re.is_match(arg) {
        return dir;
    }
    return file;
}

fn collect_user_arguments() -> Vec<String> {
    env::args().collect()
}

fn check_if_arguments_count_valid(args: &Vec<String>) -> …
Run Code Online (Sandbox Code Playgroud)

rust rust-cargo

27
推荐指数
1
解决办法
3万
查看次数

通过货物安装箱子时出错:指定的包没有二进制文件

我正在尝试使用Cargo在我的系统(Arch Linux)上安装Rust crate.我可以搜索板条箱并找到我需要的东西,例如:

 $ cargo search curl | head -n3
    Updating registry `https://github.com/rust-lang/crates.io-index`
curl (0.3.0)             Rust bindings to libcurl for making HTTP requests
curl-sys (0.2.0)         Native bindings to the libcurl library
Run Code Online (Sandbox Code Playgroud)

当我尝试安装它时,我收到以下错误:

 $ cargo install curl
    Updating registry `https://github.com/rust-lang/crates.io-index`
error: specified package has no binaries
Run Code Online (Sandbox Code Playgroud)

这是什么意思?我是否必须先从源代码构建它?如果Cargo没有安装它,它有什么意义?

 $ uname -a
Linux 4.6.1-2-ARCH #1 SMP PREEMPT Thu Jun 2 15:46:17 CEST 2016 x86_64 GNU/Linux
 $ rustc --version
rustc 1.9.0
 $ cargo --version
cargo 0.10.0 (10ddd7d 2016-04-08)
Run Code Online (Sandbox Code Playgroud)

installation rust rust-crates rust-cargo

26
推荐指数
1
解决办法
7881
查看次数

指定仅二进制依赖项

我有一个包含二进制文件和库的箱子.该库对依赖性非常轻,而二进制文件需要更多,例如,加载文件或做范围并行的事情.

目前,我的Cargo.toml设置如下:

[dependencies.kdtree]
path = "../kdtree"

[dependencies]
rand="0.3.0"
rustc-serialize = "0.3"
csv = {git = "https://github.com/BurntSushi/rust-csv.git"}
crossbeam = "0.2"
num_cpus = "0.2"

[lib]
name = "conformal"
path = "src/lib.rs"

[[bin]]
name = "ucitest"
path = "src/bin/main.rs"
Run Code Online (Sandbox Code Playgroud)

库需要的唯一依赖项是kdtreerand.但是,即使您只构建库,它似乎仍然构建了仅二进制依赖项.我已经尝试使用features各种花样像[[bin].dependencies][ucitest-dependencies](或添加dependencies= []线下[[bin]]),我认为可能使他们只建立二进制,但我不能找到一种方法.

这些不足以使这成为一个问题,但它困扰着我.有没有办法缩小依赖关系,以便它们只为特定的二进制文件构建?

rust rust-cargo

25
推荐指数
3
解决办法
3439
查看次数

是否有命令将Cargo更新到最新的正式版本?

我似乎有不同的版本rustccargo(我认为),

$ rustc -V
rustc 1.9.0 (e4e8b6668 2016-05-18)
$ cargo -V
cargo 0.10.0-nightly (10ddd7d 2016-04-08)
Run Code Online (Sandbox Code Playgroud)

有没有类似的命令

pip install --upgrade pip 
Run Code Online (Sandbox Code Playgroud)

升级cargo?就是这样的

cargo install --upgrade cargo
Run Code Online (Sandbox Code Playgroud)

package-managers rust rust-cargo

25
推荐指数
4
解决办法
7270
查看次数

如何在Rust中使用cfg检查发布/调试版本?

使用C预处理器,这是常见的,

#if defined(NDEBUG)
    // release build
#endif

#if defined(DEBUG)
    // debug build
#endif
Run Code Online (Sandbox Code Playgroud)

货物的粗略等价物是:

  • cargo build --release 发布.
  • cargo build 用于调试.

如何使用Rust的#[cfg(...)]属性或cfg!(...)宏来做类似的事情?

我知道Rust的预处理器不像C那样工作.我查看了文档,此页面列出了一些属性.(假设此列表是全面的)

debug_assertions 可以检查,但用于检查更一般的调试情况可能会误导.

我不确定这个问题是否与货物有关.

debugging preprocessor rust rust-cargo

24
推荐指数
1
解决办法
7135
查看次数

从源代码构建奇偶校验后,货物构建与"阻止等待注册表索引上的文件锁定"挂起

我按照readme说明从源代码构建Parity,然后执行以下命令:

cargo build --release
Run Code Online (Sandbox Code Playgroud)

然后:

~/.cargo/bin/cargo build --release
Run Code Online (Sandbox Code Playgroud)

.. 按照指示; 这两个导致我在提示挂起时收到以下消息:

 Blocking waiting for file lock on the registry index
Run Code Online (Sandbox Code Playgroud)

我在Mac上.

rust rust-cargo

24
推荐指数
14
解决办法
9324
查看次数

你如何启用 Rust 的“板条箱功能”?

我正在尝试使用rand::SmallRng. 文档说

此 PRNG 是功能门控的:要使用,您必须启用 crate 功能small_rng

我一直在搜索,但不知道如何启用“板条箱功能”。Rust 文档中的任何地方都没有使用该短语。这是我能想到的最好的:

[features]
default = ["small_rng"]
Run Code Online (Sandbox Code Playgroud)

但我得到:

功能default包括small_rng既不是依赖项也不是其他功能的

文档有误,还是我遗漏了什么?

rust rust-cargo

24
推荐指数
2
解决办法
5473
查看次数

错误[E0554]:稳定版本频道上不能使用#![功能]无法使用货物安装赛车

我正在尝试使用货物安装赛车,所以我cargo install racer在终端执行了命令,结果导致错误:

error[E0554]: #![feature] may not be used on the stable release channel
--> /home/rajkumar/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped-tls-0.1.2/src/lib.rs:47:34
|
47 | #![cfg_attr(feature = "nightly", feature(macro_vis_matcher))]
|                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^

error[E0554]: #![feature] may not be used on the stable release channel
--> /home/rajkumar/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped-tls-0.1.2/src/lib.rs:48:34
|
48 | #![cfg_attr(feature = "nightly", feature(allow_internal_unstable))]
|                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: aborting due to 2 previous errors

For more information about this error, try `rustc --explain E0554`.
error: failed to compile `racer v2.1.10`, intermediate artifacts can be found at `/tmp/cargo-install5YWPWW`

Caused …
Run Code Online (Sandbox Code Playgroud)

rust rust-cargo

22
推荐指数
4
解决办法
4886
查看次数

如何使用 Cargo 设置环境变量?

我在 Cargo.toml 中列出了一个需要特定环境变量集的依赖项。我可以export FOO=bar在 bash中运行并且一切正常,但是对于我的生活,我无法弄清楚如何在编译时使用 Cargo 导出这个环境变量。我试过设置环境变量build.rs通过std::envCommandprintln!所有没有效果:

// build.rs
fn main() {
    Command::new("ls")
        .env("FOO", "bar")
        .spawn()
        .expect("ls command failed to start");
}
Run Code Online (Sandbox Code Playgroud)
// build.rs
fn main() {
    std::env::set_var("FOO", "bar");
}
Run Code Online (Sandbox Code Playgroud)
// build.rs
fn main() {
    println!("cargo:rustc-env=FOO=bar");
}
Run Code Online (Sandbox Code Playgroud)

rust rust-cargo

22
推荐指数
1
解决办法
9220
查看次数