一个简单的库,在C#中非常方便,甚至是必不可少的
namespace SharedLibraries.Verification { public static class Verify {
// conditions that must be satisfied in order to use a module go here
public static void Require(bool B) {
if (B) return;
System.Diagnostics.Debugger.Break();
}
// things that should be provably true if the Require(s) of a module are met
public static void Assert(bool B) {
if (B) return;
System.Diagnostics.Debugger.Break();
}
public static void AssertFail() {
System.Diagnostics.Debugger.Break();
}
}}
namespace SharedLibraries.VerificationOff { public static class Verify {
[System.Diagnostics.Conditional("DoNotEverTurnThisOn")]
public static void Require(bool B) {}
[System.Diagnostics.Conditional("DoNotEverTurnThisOn")]
public static void Assert(bool B) {}
[System.Diagnostics.Conditional("DoNotEverTurnThisOn")]
public static void AssertFail() {}
}}
如果需求或断言失败,则会将我弹出调试器。当我想将其关闭时,只需将include命令从Verification更改为VerificationOff。关闭它甚至不会计算“ B”,因此没有开销。
我一直在尝试各种不同的方法,以尝试使Rust / VSCode库执行相同的操作。这是我到目前为止的内容:
pub mod on {
pub fn require<Predicate: FnOnce() -> bool>(check : Predicate) {
if cfg!(debug_assertions) {
if !check() {
unsafe {
println!("before debug break");
winapi::um::debugapi::DebugBreak();
println!("after debug break");
}
}
}
}
pub fn assert<Predicate: FnOnce() -> bool>(check : Predicate) {
if cfg!(debug_assertions) {
if !check() {
unsafe {
winapi::um::debugapi::DebugBreak();
}
}
}
}
}
pub mod off {
pub fn require<Predicate: FnOnce() -> bool>(_check : Predicate) {}
pub fn assert <Predicate: FnOnce() -> bool>(_check : Predicate) {}
}
至少在以上代码与执行的程序位于相同的包装箱中时,此方法才有效。但是,当使用“外部板条箱验证程序”(或其他名称)将其包含在独立板条箱中时,则每当断言失败时,程序就会崩溃,并且调试器将关闭。它完全崩溃在winapi调用上。调试器vscode使用的是Windows的cppvsdbg。
我正在寻求帮助以使其正常工作。也许转换为宏或使用其他命令来引起调试器的注意。我生锈很新鲜,所以请明确。