Windows 为什么调用内存密集型的Rust函数会在主窗口上导致堆栈溢出,而在测试中不会?

Windows 为什么调用内存密集型的Rust函数会在主窗口上导致堆栈溢出,而在测试中不会?,windows,rust,stack-overflow,Windows,Rust,Stack Overflow,我在Windows10上部署了一个Rust二进制文件,不过源代码应该与操作系统无关。当我运行调用板条箱主要功能的冒烟测试时,它失败: 在tests\main.rs中: 使用std::process::Command; 使用std::process::Stdio; #[测试] fn my_test()->结果{ 让mut cmd=Command::main_binary()?; //省略了一些特定于项目的代码 cmd.stderr(Stdio::inherit()).stdout(Stdio::i

我在Windows10上部署了一个Rust二进制文件,不过源代码应该与操作系统无关。当我运行调用板条箱主要功能的冒烟测试时,它失败:

tests\main.rs
中:

使用std::process::Command;
使用std::process::Stdio;
#[测试]
fn my_test()->结果{
让mut cmd=Command::main_binary()?;
//省略了一些特定于项目的代码
cmd.stderr(Stdio::inherit()).stdout(Stdio::inherit()).unwrap();
}
请注意,
Command
来自
assert\u cmd
库(版本
0.10

运行
目标
文件夹中的
.exe
文件也是如此,当输入与我的任何其他测试相同时,该文件会给出:

C:\path\to\project\target\x86\u 64-pc-windows-msvc\debug>my\u project.ext-i path\to\vetted\output
起动
启动记忆功能
线程'main'已溢出其堆栈
但是,主函数只不过是一个瘦包装器,它解析命令行参数,然后在内部调用一些函数:

src\main.rs中

pub fn main()->结果{
println!(“已启动”)
//解析命令行参数
println!(“启动内存密集型函数”);
内存密集型函数(/*此处为命令行参数*/)?;
println!(“已完成的内存密集型功能”);
}
最后一个print语句从不打印任何内容。奇怪的是,我有几个测试,总共330个,其中40个左右直接调用
内存密集型函数()。
锈菌是否有我不知道的行为

我一直在考虑在不同的阻塞线程上运行
内存密集型函数()
,但我不确定这会有什么帮助

应该注意的是,实质上重写此函数并不是一个真正的选项(尽管欢迎使用一般提示或指南)


tl;dr许多调用内存密集型函数的测试工作正常,但在
main
中使用此函数会导致它崩溃。

很难回答您的问题,因为它不包含内存密集型函数。我们无法说出代码中存在哪些板条箱(及其版本)、类型、特征、字段等。如果您试图重现您的错误(如果可能的话),或者在全新的货运项目中,那么我们将更容易帮助您,然后您的问题将包括附加信息。您可以使用以下方法减少在此处发布的原始代码。谢谢另请参见什么是
Command::main_binary
?我看不出
std
中有定义。最后一个print语句从不打印任何内容,第一个语句是否打印?第一个语句确实打印。另请参见/。Windows上的默认堆栈大小为1MiB(例如,
main
)。生锈螺纹的默认堆栈大小为2MiB(例如测试)。