2010-09-02 125 views
0

我正在使用VB Express 2008.我知道如何判断代码是否构建在调试更多或发布,但现在我想知道如何判断它是否在Visual Studio IDE中运行(以便我可以添加一些调试MsgBox(),而不用担心它们会显示我是否意外地发布了调试版本)。如何判断(VB)代码是否在Visual Studio中运行?

+0

为什么你不试试Debug.Assert? - http://msdn.microsoft.com/en-us/library/kssw4w7z.aspx – 2010-09-02 02:34:42

+0

因为它“检查条件;如果条件为false,显示一个消息框显示调用堆栈”,我不想要调用堆栈。在Borland产品中检查在IDE中运行是否够简单,所以我希望它也可以在VS 2008中使用。 – Mawg 2010-09-02 02:46:29

回答

1

是System.Diagnostics.Debugger.IsAttached你在找什么?

+0

当开发人员尝试调试运行在客户上的生产代码时会发生什么?代码更改路径,并认为它使用您发布的解决方案从VS IDE运行。检查附加的调试器只会告知代码是否附加了活动的调试器,而不是在开发过程中代码位于IDE中。 – StarPilot 2014-06-06 17:26:42

+0

你有更好的解决方案吗,@ StarPilot?由于这是被接受的答案,它似乎是OP寻找的解决方案...... – Guy 2014-06-06 21:23:23

+0

只要开发者没有选择不使用vshost.exe,代码就可以检查它的可执行文件名是否包含vshost 。但是可以选择退出,所以它不能100%保证准确。正如我上面评论的那样,问题在于检查调试是否比在IDE中运行更大的可能性。不幸的是,在VSExtension代码之外,没有100%的方法来判断IDE是否托管运行代码。 – StarPilot 2014-06-06 22:06:50

1

如果您正在构建Test and Prod,请考虑在代码中使用预处理器指令。

#If DEBUG Then 
    MsgBox("Foo") 
#End If 

这倒下,当然,如果你出货调试的二进制到非开发环境。我知道这是从你问这个问题的另一个角度(IDE)来攻击问题。

1

尝试,如果你想确保你永远不会显示调试信息给用户,你可以使用Debug.Write()Debug.WriteLine()检查System.Diagnostics.Debugger

+0

对不起,但@guy打了一分钟(+1,虽然) – Mawg 2010-09-08 04:12:10

1

IsAttached财产。这些命令将输出提供给调试输出窗口的文本。请注意,您可以将调试输出窗口攻击到在客户机器上运行生产代码的程序,而无需安装开发环境!

测试连接的调试器并不表示调试器也在IDE中。在很多环境中,将调试器附加到在客户系统上运行的生产代码中以识别特定客户的安装和使用情况出了什么问题是相当普遍的。测试一个调试器,然后假设你在一个IDE中将会在生产环境中排除调试器的这种用法。

相关问题