#refcell #borrow #stack-trace #mutable-borrow #error #dynamic #failure

accountable-refcell

一个提供动态借用失败可操作信息的 RefCell 包装器

3 个不稳定版本

使用旧的 Rust 2015

0.2.1 2020 年 12 月 11 日
0.2.0 2020 年 1 月 6 日
0.1.0 2017 年 11 月 2 日

#602Rust 模式

Download history 1966/week @ 2024-03-14 2145/week @ 2024-03-21 1669/week @ 2024-03-28 982/week @ 2024-04-04 1118/week @ 2024-04-11 885/week @ 2024-04-18 1505/week @ 2024-04-25 1264/week @ 2024-05-02 768/week @ 2024-05-09 1234/week @ 2024-05-16 1243/week @ 2024-05-23 1206/week @ 2024-05-30 901/week @ 2024-06-06 1832/week @ 2024-06-13 1795/week @ 2024-06-20 1150/week @ 2024-06-27

5,785 每月下载量

MPL-2.0 许可证

17KB
386

可问责 RefCell

该包封装了标准库的 RefCell 类型,同时使其更容易处理动态借用失败。每个对单元格的不可变或可变借用都会记录执行借用的代码的堆栈跟踪,并在借用结束时销毁该记录。在动态借用失败的情况下(无论是尝试可变借用时存在未解决的不可变借用,还是存在未解决的可变借用时的不可变借用),如果存在 RUST_BACKTRACE 环境变量,则冲突的堆栈跟踪将打印到 stderr。

示例(尝试可变借用时存在两个未解决的不可变借用)

Outstanding borrows:
   1: _$LT$accountable_refcell..RefCell$LT$T$GT$$GT$::borrow::h93de6dc5716214a2
   2: accountable_refcell::tests::cannot_borrow_mutably_multi_borrow::hd9184755b4f98dae
   3: _$LT$F$u20$as$u20$test..FnBox$LT$T$GT$$GT$::call_box::h30f93c5e44004cdd (.llvm.6B7221EB)
   4: __rust_maybe_catch_panic
   5: std::sys_common::backtrace::__rust_begin_short_backtrace::ha384908c78afca63
   6: std::panicking::try::do_call::h7da6a9b8bfb2762c (.llvm.E1945E4B)
   7: __rust_maybe_catch_panic
   8: _$LT$F$u20$as$u20$alloc..boxed..FnBox$LT$A$GT$$GT$::call_box::hd53410bd165f5d82 (.llvm.B1C468B7)
   9: std::sys::imp::thread::Thread::new::thread_start::hf16f292ea51f5fa0
  10: _pthread_body
  11: _pthread_start

   1: _$LT$accountable_refcell..RefCell$LT$T$GT$$GT$::borrow::h93de6dc5716214a2
   2: accountable_refcell::tests::cannot_borrow_mutably_multi_borrow::hd9184755b4f98dae
   3: _$LT$F$u20$as$u20$test..FnBox$LT$T$GT$$GT$::call_box::h30f93c5e44004cdd (.llvm.6B7221EB)
   4: __rust_maybe_catch_panic
   5: std::sys_common::backtrace::__rust_begin_short_backtrace::ha384908c78afca63
   6: std::panicking::try::do_call::h7da6a9b8bfb2762c (.llvm.E1945E4B)
   7: __rust_maybe_catch_panic
   8: _$LT$F$u20$as$u20$alloc..boxed..FnBox$LT$A$GT$$GT$::call_box::hd53410bd165f5d82 (.llvm.B1C468B7)
   9: std::sys::imp::thread::Thread::new::thread_start::hf16f292ea51f5fa0
  10: _pthread_body
  11: _pthread_start

thread 'tests::cannot_borrow_mutably_multi_borrow' panicked at 'RefCell is already immutably borrowed.', src/lib.rs:170:12

该包的 RefCell 类型公共 API 与 std::cell::RefCell 的公共 API 相似。

依赖关系

~2.5–3.5MB
~72K SLoC