我当前正在运行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
的来源。