代码之家  ›  专栏  ›  技术社区  ›  Brandi

Visual Studio-调试与发布

  •  15
  • Brandi  · 技术社区  · 16 年前

    控制台应用程序运行得很好。我把它作为一种服务放在本地计算机上,在调试模式下编译,仍然工作得很好。我现在准备发布了,突然,当我将它设置为发布模式时,服务编译并安装,但什么也没发生(服务中根本没有代码在运行)。

    我意识到release和debug模式是属性配置设置,但是在release模式下,即使我选中define debug constant,取消选中Optimize code,并将debug info设置为full,它仍然什么也不做。

    (作为旁注,我尝试将目标框架重置为3.5,以确保这不是问题所在)

    所以我的问题(按重要性排序)是:

    1. 以任何方式使用我的“调试”版本会导致任何问题吗?

    2. 除了我已经尝试更改的三个设置之外,debug和release之间还有什么不同?

    3. 这在我看来是个奇怪的错误,激起了我的好奇心。你知道这是什么原因吗?

    编辑: 值得一提的是,我已经在使用自定义安装程序。基本上我编译程序(在debug或release中),然后用相应的安装程序安装它。

    2 回复  |  直到 16 年前
        1
  •  17
  •   Guffa    16 年前

    1) 它可能(如果不是直接的话)通过使应用程序变慢并使用更多内存来间接地实现。

    2) 当它在调试模式下运行时,会有一些不同的工作方式,例如:

    • 代码是用一些额外的NOP指令编译的,因此在每行代码的开头至少有一条指令,这样就可以在任何一行中放置断点。

    • 指令可以在发布模式下重新排列,但不能在调试模式下重新排列,因此代码可以单步执行,结果将与源代码的确切顺序相对应。

    • 异常包含更多信息,抛出时处理异常需要更长的时间。

    所有这些差异都相对较小,但它们是实际的差异,在某些情况下可能很重要。

    如果您看到debug模式和release模式在性能上有很大的差异,通常是因为代码有问题,比如抛出和捕获大量异常。如果代码中存在争用条件,那么它可能只在发布模式下发生,因为在调试模式下有一些额外的开销使代码运行稍微慢一些。

        2
  •  0
  •   Chad    16 年前

    我不确定我能不能和1或2说话,但当我遇到这样的问题时,那是因为 线程/并发错误 . 我不确定你的应用程序有多大,但那可能是一个好的开始。