如何处理"发生未知错误"什么时候运行Rust程序?

时间:2015-12-03 04:58:53

标签: rust

我目前正在运行cargo run并获得最常见的错误An unknown error has occurred

当我运行cargo run --verbose时,我得到Process didn't exit successfully: 'target/debug/ok_rust' (signal: 11),我不知道如何处理。

我该如何调试?我应该做些什么?用夜间版本测试它,但是相同的库?我怎么知道我是否负责或者是否生锈?

1 个答案:

答案 0 :(得分:5)

根据您提供的错误,这不是工具问题(也就是说,Cargo和rustc都能正常工作),但是您的程序是:

Process didn't exit successfully: 'target/debug/ok_rust' (signal: 11)

信号11表示程序中发生了分段错误。 Segfaults通常在访问无效内存时发生,例如,在读取被破坏的对象时。 Rust明确旨在避免段错误;如果发生这种情况,则表示程序中的unsafe块之一包含错误。这个不安全的块可能是您自己编写的块,也可能是您使用的库之一。

无论如何,您需要找到发生segfault的确切位置。您可以使用调试器(gdb或lldb,具体取决于您的系统),也可以将调试输出添加到您的程序中,您可以使用它来查明有问题的行。然后,您需要将问题追溯到其中一个unsafe块。例如,如果您发现通过引用访问值时发生了段错误,例如

let x = some_struct.field;

其中some_struct: &SomeStructsome_struct可能指向无效对象;这只有在some_struct块中创建unsafe时才会发生,因此您需要找到some_structs所在的位置。