运行 Rust 程序时如何处理"An unknown error occurred"?



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

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

如何调试?我该怎么办?用夜间版本测试它,但使用相同的库?我该怎么知道是我负责还是Rust?

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

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

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

不管怎样,你需要找到segfault发生的确切地点。您可以使用调试器(gdb或lldb,具体取决于您的系统),也可以将调试输出添加到程序中,这样您就可以确定有问题的行。然后,您需要将问题追溯到其中一个unsafe块。例如,如果您发现通过引用(如)访问值时发生segfault

let x = some_struct.field;

其中some_struct: &SomeStruct,则很可能some_struct指向无效对象;只有在unsafe块中创建了some_struct时才会发生这种情况,因此需要查找some_structs的来源。

相关内容

最新更新