我目前正在运行cargo run
并获得最常见的错误An unknown error has occurred
。
当我运行cargo run --verbose
时,我得到Process didn't exit successfully: 'target/debug/ok_rust' (signal: 11)
,我不知道如何处理。
我该如何调试?我应该做些什么?用夜间版本测试它,但是相同的库?我怎么知道我是否负责或者是否生锈?
答案 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: &SomeStruct
,some_struct
可能指向无效对象;这只有在some_struct
块中创建unsafe
时才会发生,因此您需要找到some_structs
所在的位置。