我目前正在运行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表示程序中发生了分段错误.Segfaults通常在访问无效内存时发生,例如,在读取被破坏的对象时.Rust明确旨在避免段错误; 如果发生这种情况,则表示unsafe
程序中的某个块包含错误.这个不安全的块可能是您自己编写的块,也可能是您使用的库之一.
无论如何,你需要找到segfault发生的确切位置.您可以使用调试器(gdb或lldb,具体取决于您的系统),也可以将调试输出添加到您的程序中,您可以使用它来查明有问题的行.然后,您需要将问题追溯到其中一个unsafe
块.例如,如果您发现通过引用访问值时发生了段错误,例如
let x = some_struct.field;
在哪里some_struct: &SomeStruct
,那么很可能some_struct
指向一个无效的对象; 只有some_struct
在unsafe
块中创建时才会发生这种情况,因此您需要查找some_structs
源自何处.