Debugging 如何创建用于调试的Rust函数或宏,以在发布版本中进行优化?

Debugging 如何创建用于调试的Rust函数或宏,以在发布版本中进行优化?,debugging,rust,Debugging,Rust,在调试构建中,我想在几乎每次调用OpenGL之后检查OpenGL错误,以简化调试。由于这是一个代价高昂的操作,我不想在发布版本中进行。现在我使用的函数如下: pub fn debug_panic_on_errors() { if cfg!(debug_assertions) { get_errors().unwrap(); } } 我假设这种方法总是会被完全优化,对吗?是否有更好的、更能证明未来的方法?在发布模式下,函数将扩展为if false{…},这是一种非

在调试构建中,我想在几乎每次调用OpenGL之后检查OpenGL错误,以简化调试。由于这是一个代价高昂的操作,我不想在发布版本中进行。现在我使用的函数如下:

pub fn debug_panic_on_errors() {
    if cfg!(debug_assertions) {
        get_errors().unwrap();
    }
}

我假设这种方法总是会被完全优化,对吗?是否有更好的、更能证明未来的方法?

在发布模式下,函数将扩展为
if false{…}
,这是一种非常容易优化的方法,因此您可以按原样使用它


如果你是偏执狂,你可以
#[cfg]
两个函数

#[cfg(debug_assertions)]
pub fn debug_panic_on_errors() { 
    get_errors().unwrap();
}

#[cfg(not(debug_assertions))]
pub fn debug_panic_on_errors() {
}

因此,在解析过程中选择结果,以确保我们不依赖优化器。但是我并不推荐这个…

在发布模式下,函数将扩展为
if false{…}
,这是非常容易优化的,所以您可以按原样使用它


如果你是偏执狂,你可以
#[cfg]
两个函数

#[cfg(debug_assertions)]
pub fn debug_panic_on_errors() { 
    get_errors().unwrap();
}

#[cfg(not(debug_assertions))]
pub fn debug_panic_on_errors() {
}

因此,在解析过程中选择结果,以确保我们不依赖优化器。但我不建议这样做…

或者您可以使用已经使用运行时和编译时检查的。我两小时前刚刚提交了一个问题,建议使用
调试
宏:。最好能证明还有其他人会使用该功能。或者你可以使用已经使用运行时和编译时检查的。我两小时前刚刚提交了一个问题,提出了一个
调试
宏:。这将是很好的显示,有其他人谁会使用该功能。