调试失败!在图书馆

时间:2014-05-24 01:39:01

标签: debugging exception rust

我一直在构建我的代码,以便我有一个库,然后我在另一个文件中使用。除了今天我遇到fail!宏抛出的错误(索引越界)时,这一直运行良好。 具体来说,我不知道他们被扔到哪里。报告说当我用extern crate blah = "blabla"加载库时它们会被抛出,但事实并非如此,因为当我在测试文件中注释掉一些函数调用时,一切运行正常。

我有一个想法是手动包含所有文件而根本不使用库。这似乎非常hacky ...... 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

虽然此报告确实正确,但行号/位置具有误导性。对于这个简单的问题,很容易看出错误。对于较大的文件,情况并非如此。

修改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>

1 个答案:

答案 0 :(得分:0)

要在发生紧急情况时进行调试,请在rust_panic函数上设置一个断点。

b rust_panic