rust - 仅当处于 Release模式时,我如何在没有窗口的情况下运行 Rust 程序

标签 rust

<分区>

我有一个目前正在处理的 Rust 项目,我经常需要调试和部署它。当它被部署时,它在没有窗口的情况下在后台运行,但是当我调试时,我想要一个窗口来查看是否有任何运行时错误。

我目前使用 #![windows_subsystem = "windows"] 并在我调试时将其注释掉,但是程序本身有没有办法检查它是否处于 Debug模式以便它不使用那个标志?

最佳答案

您可以使用 #![<a href="https://doc.rust-lang.org/reference/conditional-compilation.html#the-cfg_attr-attribute" rel="noreferrer noopener nofollow">cfg_attr</a>(predicate, attribute)]如果特定谓词的计算结果为真,则仅使用属性进行编译。

至于谓词是什么,我的建议是使用显式 feature (例如 console )当您想要使用非默认行为构建时设置(例如,显示控制台窗口)。

此外,如果您想让您的代码具有可移植性,您还应该检查您是否针对 Windows 进行编译。

Cargo.toml :

[features]
console = []

main.rs :

#![cfg_attribute(
  all(
    target_os = "windows",
    not(feature = "console"),
  ),
  windows_subsystem = "windows"
)]

然后你可以用--features console编译或运行拥有默认 console而是使用子系统。


如果您想实际检查 Debug模式,最接近的是 debug_assertions 谓词,在没有优化的情况下编译时默认启用。

关于rust - 仅当处于 Release模式时,我如何在没有窗口的情况下运行 Rust 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68238935/

相关文章:

concurrency - 为什么 Mutex 没有解锁?

server - 如何从 actix-web 中间件返回早期响应?

closures - 如何在Rust的结构中存储闭包?

rust - 创建 Cargo 工作区时没有在 list 中指定目标

rust - 安全遍历有向无环图

asynchronous - 如何在 Rust 中竞赛 future 集合?

rust - `while let Ok(t) ... = try_read!(...)` 使读取循环更整洁

file - 从文件中获取数字并放入 Vec<i32> 但不断出现错误

ruby - 是否将字符串传回 FFI 模块中必要的调用代码以防止内存泄漏?

rust - 移动结构时如何自动清除结构中的属性?