确定已发布 DLL 中的调试/发布模式?没有#DEBUG

Posted

技术标签:

【中文标题】确定已发布 DLL 中的调试/发布模式?没有#DEBUG【英文标题】:Determine debug/release mode in published DLL? Without #DEBUG 【发布时间】:2011-04-01 12:43:57 【问题描述】:

我有一个可以在某些项目中引用的组件(例如,Component.dll)。当然,我以发布模式发布它。

在另一个项目中(例如,Project.exe)我引用了Component.dll。 如果我在调试模式下构建Project.exe,有没有办法在我的Component.dll 库中找到它?

澄清更多:如果我在Component.dll 中有一个名为Test 的类和方法。我可以这样做吗:

public void Test()
    if(Debug.IsInDebugMode)
        ...

请记住,Component.dll 是在发布模式下构建的。

【问题讨论】:

【参考方案1】:

您的代码是在发布模式还是在调试模式下构建并不重要。生成的 IL 几乎相同。 Debug 版本将有一个 jitter 用于设置编译默认值的属性,该属性在您的中缺失。接下来重要的是如何你调试或运行你的应用程序。重要的设置是工具 + 选项、调试、常规、“在模块加载时抑制 JIT 优化”。默认勾选。

现在,您的应用是否由调试器启动至关重要。这很容易找到,使用System.Diagnostics.Debugger.IsAttached 属性。如果为 false,则从您的 IL 生成的机器代码将通过抖动进行优化。一个退化的情况是在代码启动后附加一个调试器。顺便说一句,这对您没有任何影响,这有点重要。

【讨论】:

它看起来像 Debugger.IsAttached 是我需要的。当我再测试一下解决方案时,我会标记答案是正确的。

以上是关于确定已发布 DLL 中的调试/发布模式?没有#DEBUG的主要内容,如果未能解决你的问题,请参考以下文章

构建模式始终是调试

从第三方 DLL 调用 Qt 中的函数在调试模式下工作,在发布时崩溃

Visual Studio 中的 DLL 响应太慢

堆中的 DLL 内存泄漏

混合模式调试(C++、C#、VB)

为啥在发布模式下调试会隐藏信息?