Debugging 调试失败!在图书馆
我一直在构建我的代码,这样我就有了一个库,然后在另一个文件中使用。除了今天我遇到了一个由Debugging 调试失败!在图书馆,debugging,exception,rust,Debugging,Exception,Rust,我一直在构建我的代码,这样我就有了一个库,然后在另一个文件中使用。除了今天我遇到了一个由fail!抛出的错误外,这一切都很好宏(索引超出范围)。 具体来说,我不知道它们是从哪里扔来的。报告说,当我用extern-claret blah=“blabla”加载库时,它们被抛出,但这不是真的,因为当我注释掉测试文件中的一些函数调用时,一切都正常运行 我的一个想法是手动包含所有文件,而不使用库。这似乎很有意思。。。Gdb也没有帮助(尽管有-g标志) 谢谢 编辑: 很抱歉,不够清晰。这是一个运行时问题。我
fail!抛出的错误外,这一切都很好代码>宏(索引超出范围)。
具体来说,我不知道它们是从哪里扔来的。报告说,当我用extern-claret blah=“blabla”
加载库时,它们被抛出,但这不是真的,因为当我注释掉测试文件中的一些函数调用时,一切都正常运行
我的一个想法是手动包含所有文件,而不使用库。这似乎很有意思。。。Gdb也没有帮助(尽管有-g标志)
谢谢
编辑:
很抱歉,不够清晰。这是一个运行时问题。我已经模拟了一些复制此错误的示例代码
库文件:
#![crate_id = "that"]
#![crate_type = "rlib"]
pub mod thing {
fn a() {
let v = vec!(1f32);
println!("{}", v.get(3));
}
pub fn b() {
a();
}
}
Bin文件:
extern crate that;
fn main() {
that::thing::b();
}
编译和运行时,出现以下错误:
task '<main>' failed at 'index out of bounds: the len is 1 but the index is 3', lib.rs:1
任务“”在“索引超出范围:len为1但索引为3”处失败,库rs:1
虽然该报告确实正确,但行号/位置具有误导性。对于这个简单的问题,很容易看出哪里出了问题。对于较大的文件,情况并非如此
编辑2
使用RUST_BACKTRACE=1运行的结果:
>>>>>>> RUST_BACKTRACE=1 ./bin
task '<main>' failed at 'index out of bounds: the len is 1 but the index is 3', lib.rs:1
stack backtrace:
1: 0x4661d0 - rt::backtrace::imp::write::hfe294d72359867edAZy::v0.11.0.pre
2: 0x44d850 - rt::unwind::begin_unwind_inner::h0c8451a5a31731e8Hzy::v0.11.0.pre
3: 0x44cd30 - rt::unwind::begin_unwind_fmt::h2e6bc3145b6b3fb9Ryy::v0.11.0.pre
4: 0x4660e0 - rust_begin_unwind
5: 0x4a75d0 - failure::begin_unwind::h3bb6514279e9a504IOv::v0.11.0.pre
6: 0x4a7610 - failure::fail_bounds_check::he1ed5c80925626c6IMv::v0.11.0.pre
7: 0x44c810 - vec::Vec<T>::get::h5370221266733407395::v0.0
8: 0x44b0f0 - thing::a::h3f669f2dfb075f3cfaa::v0.0
9: 0x44cd00 - thing::b::h8fc1d5bafb3ab544rba::v0.0
10: 0x4032b0 - main::he270e826329bbcf4faa::v0.0
11: 0x44af90 - start::closure.7862
12: 0x4617c0 - rt::task::Task::run::closure.25316
13: 0x46db00 - rust_try
14: 0x461710 - rt::task::Task::run::hb455d17a166d559b4ow::v0.11.0.pre
15: 0x44abd0 - start::h58e604f51e8fd72cipe::v0.11.0.pre
16: 0x44ab40 - lang_start::h90f473af132f8958Coe::v0.11.0.pre
17: 0x4032e0 - main
18: 0x7ff54744df10 - __libc_start_main
19: 0x4031b0 - <unknown>
20: 0x0 - <unknown>
>>锈迹_BACKTRACE=1./bin
任务“”在“索引超出范围”处失败:len为1,但索引为3,库rs:1
堆栈回溯:
1:0x4661d0-rt::回溯::imp::写入::hfe294d72359867edAZy::v0.11.0.pre
2:0x44d850-rt::展开::开始展开\内部::h0c8451a5a31731e8Hzy::v0.11.0.pre
3:0x44cd30-rt::展开::开始_展开_fmt::h2e6bc3145b6b3fb9Ryy::v0.11.0.pre
4:0x4660e0-生锈\u开始\u展开
5:0x4a75d0-故障::开始解卷::h3bb6514279e9a504IOv::v0.11.0.pre
6:0x4a7610-故障::故障检查::he1ed5c80925626c6IMv::v0.11.0.pre
7:0x44c810-vec::vec::get::h5370221266733407395::v0.0
8:0x44b0f0-thing::a::h3f669f2dfb075f3cfaa::v0.0
9:0x44cd00-thing::b::H8FC1D5BAFB3B3AB544RBA::v0.0
10:0x4032b0-主要::he270e826329bbcf4faa::v0.0
11:0x44af90-开始::关闭.7862
12:0x4617c0-rt::task::task::run::Close.25316
13:0x46db00-锈蚀试验
14:0x461710-rt::task::task::run::hb455d17a166d559b4ow::v0.11.0.pre
15:0x44abd0-开始::h58e604f51e8fd72cipe::v0.11.0.pre
16:0x44ab40-lang_start::h90f473af132f8958Coe::v0.11.0.pre
17:0x4032e0-主
18:0x7ff54744df10-\uuu libc\u start\u main
19:0x4031b0-
20:0x0-
要在紧急情况发生时调试紧急情况,请在rust\u panic
函数上设置断点
b rust_panic
是编译代码失败还是运行代码失败?请提供完整的控制台输出。您可能希望尝试使用RUST\u BACKTRACE=1
运行程序,以获得完整的堆栈跟踪。只添加了示例文件和控制台输出。很抱歉,我的原始帖子没有具体说明,而且出现了延迟。@BurntSushi5 the RUST_BACKTRACE=1是一个很好的技巧。它确实告诉了我有问题的函数,但是没有行号,而且有点神秘。用结果编辑。@luke:第7帧和第8帧告诉您这里需要知道的是。get
调用函数a
;我猜你的大例子中的函数可能更大,因此追踪确切原因更复杂?