RipGrep musl 二进制文件在进行非常大搜索时偶尔出现段错误
请勾选此框以确认您已查看上述内容。我有一个不同的问题。您正在使用哪个版本的 ripgrep?ripgrep 15.2.0 (rev e89fff8) 特性:+pcre2 simd(编译):+SSE2,-SSSE3,-AVX2 simd(运行时):+SSE2,+SSSE3,+AVX2 PCRE2 10.45 可用(JIT 可用)您是如何安装 ripgrep 的?我最初在与 OpenAI Codex 捆绑的 rg 中遇到此错误。该二进制文件与 https://github.com/BurntSushi/ripgrep/releases/download/15.2.0/ripgrep-15.2.0-x86_64-unknown-linux-musl.tar.gz 中的完全相同,我独立于任何 Codex 依赖性重现了该错误。对于以下分析,我通过 CROSS_CONTAINER_ENGINE=podman CARGO_PROFILE_RELEASE_DEBUG=true ~/.cargo/bin/cross build --release --target x86_64-unknown-linux-musl 构建了包含调试符号的 rg-15.2。您在什么操作系统上使用 ripgrep?OpenSUSE Tumbleweed Linux x86_64 请描述您的错误。为 x86_64-unknown-linux-musl 构建的 Ripgrep 在以高并发度搜索非常大的树时偶尔会崩溃并出现 SIGSEGV。崩溃的行是关于 MUSL 的 mallocng 中堆元数据的完整性断言,这是 opendir 中的一个 calloc 调用。完整的堆栈跟踪如下。重现此行为的步骤是什么?拥有一个足够大的搜索树似乎对重现至关重要。运行附带的 generate_repro_tree.py。这是一个 LLM 编写的程序,用于生成一个充满随机文件的树,这些文件模拟我最初遇到错误的代码库的统计信息。它将生成一个包含大约 20GiB 数据和 1.8M 文件的树。然后在该树的根目录下,循环运行 rg,搜索树中不存在的某个任意字面字符串:while true; do rg tnoheueunotshisnthukoethnsueothnsiuothonesuioseuinth; done。在我的 24 核系统上,如果有足够的可用内存使搜索树适合内核的块缓存,通常需要大约一分钟才会出现 SIGSEGV。实际行为是什么?我得到了一个包含以下堆栈跟踪的核心转储:#0 get_meta () 在 ../src_musl/src/malloc/mallocng/meta.h:141 #1 __malloc_allzerop () 在 ../src_musl/src/malloc/mallocng/malloc.c:384 #2 0x00007f71f8381b2d 在 calloc () 处 ../src_musl/src/malloc/calloc.c:41 #3 0x00007f71f83810f4 在 opendir () 处 ../src_musl/src/dirent/opendir.c:15 #4 0x00007f71f835c133 在 std::sys::fs::unix::readdir::{closure#0} () 处在 library/std/src/sys/fs/unix.rs:2081 #5 std::sys::helpers::small_c_string::run_with_cstr_stack<*mut libc::unix::DIR> () 在 library/std/src/sys/helpers/small_c_string.rs:48 #6 std::sys::helpers::small_c_string::run_with_cstr<*mut libc::unix::DIR> () 在 library/std/src/sys/helpers/small_c_string.rs:28 #7 std::sys::helpers::small_c_string::run_path_with_cstr<*mut libc::unix::DIR> () 在 library/std/src/sys/helpers/small_c_string.rs:18 #8 std::sys::fs::unix::readdir () 在 library/std/src/sys/fs/unix.rs:2081 #9 std::sys::fs::read_dir () 在 library/std/src/sys/fs/mod.rs:68 #10 0x00007f71f8206b5c 在 std::fs::read_dir<&std::path::Path> (path=...) 处在 /home/dfranke/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/fs.rs:3265 #11 ignore::walk::Work::read_dir (self=0x7f71f5bfeb20) 在 crates/ignore/src/walk.rs:1551 #12 ignore::walk::Worker::run_one (self=0x7f71f5bfef08, work=...) 在 crates/ignore/src/walk.rs:1749 #13 ignore::walk::Worker::run (self=...) 在 crates/ignore/src/walk.rs:1697 #14 0x00007f71f821c866 在 ignore::walk::{impl#15}::visit::{closure#0}::{closure#1}::{closure#0} () 处在 crates/ignore/src/walk.rs:1463 #15 std::sys::backtrace::__rust_begin_short_backtrace<ignore::walk::{impl#15}::visit::{closure#0}::{closure#1}::{closure_env#0}, ()> (f=...) 在 /home/dfranke/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys/backtrace.rs:166 #16 0x00007f71f8224596 在 std::thread::lifecycle::spawn_unchecked::{closure#1}::{closure#0}<ignore::walk::{impl#15}::visit::{closure#0}::{closure#1}::{closure_env#0}, ()> () 在 /home/dfranke/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/thread/lifecycle.rs:70 #17 core::panic::unwind_safe::{impl#23}::call_once<(), std::thread::lifecycle::spawn_unchecked::{closure#1}::{closure_env#0}<ignore::walk::{impl#15}::visit::{closure#0}::{closure#1}::{closure_env#0}, ()>> (self=...) 在 /home/dfranke/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/panic/unwind_safe.rs:275 #18 std::panicking::catch_unwind::do_call<core::panic::unwind_safe::AssertUnwindSafe<std::thread::lifecycle::spawn_unchecked::{closure#1}::{closure_env#0}<ignore::walk::{impl#15}::visit::{closure#0}::{closure#1}::{closure_env#0}, ()>>, ()> (data=<error reading variable: Cannot access memory at address 0x0>) 在 /home/dfranke/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:581 #19 std::panicking::catch_unwind<(), core::panic::unwi
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡