考虑以下控制台应用程序代码:Thread.CurrentThread.CurrentCulture=newCultureInfo("en-GB");Thread.CurrentThread.CurrentUICulture=Thread.CurrentThread.CurrentCulture;DateTimedate=newDateTime(2014,01,19);Console.WriteLine("{0}",date);//Prints19/01/2014Debug.WriteLine("{0}",date);//Prints01/19/2014Debug.WriteLine(d
我一直在围绕System.Diagnostics.Debug的使用做一些性能测试,似乎在构建Release配置时,与静态类Debug相关的所有代码都被完全删除。我想知道编译器是怎么知道的。也许有一些类或配置属性允许准确指定该行为。我正在尝试创建一些我想从Release配置中完全删除的调试代码,我想知道我是否可以像Debug类那样简单地更改配置参数来删除代码。 最佳答案 您可以申请ConditionalAttribute属性,将字符串“DEBUG”用于任何方法,并且对该项目的调用将仅出现在DEBUG构建中。这与使用#ifdef方法不同
我的代码中有几个到目前为止运行良好:#IfDEBUGThen...somecodehere#EndIf现在,我注意到最近“#IfDEBUGThen...#EndIf”中的代码也在“Release模式”下执行。这很奇怪,以前没有发生过。可能发生了什么#IfDEBUG现在被忽略(它们在IDE中的调试或最终可执行文件中都被忽略)?我已经应用了Clean、Rebuild等:没有运气。感谢您提供任何提示和帮助。-帕姆 最佳答案 首先,确保您了解运行代码的方式与构建代码的方式之间的区别。太多人将“在调试器中启动”与“调试版本”等同起来,将“不在
是否可以在VisualStudio中同时调试多个项目?我知道您可以从解决方案属性中选择多个启动项目,但如何处理断点?如果两个项目使用同一个类(它的两个不同实例),并且我在其中的一个断点处停止,它只会阻止一个程序还是两个程序?我怎么知道哪个可执行文件正在断点?我有点困惑。 最佳答案 是的,这是可能的。您可以在解决方案中设置多个启动项目(右键单击解决方案,转到设置启动项目,选择多个启动项目),并为包含在解决方案(无、开始、不调试就开始)。如果您将多个项目设置为开始,则调试器将在启动时附加到每个项目。当您遇到断点时,您可以使用调试位置工具
我想让ToString()在Debug模式下为我控制的类显示。如果这是当您将鼠标悬停在变量上时首先显示的内容,那就太好了。这个有属性吗? 最佳答案 标记你的类(class)[System.Diagnostics.DebuggerDisplay("{ToString()}")]测试:[System.Diagnostics.DebuggerDisplay("{ToString()}")]classMyClass{privatestring_foo="Thisisthetextthatwillbedisplayedatdebugging"
我在VS2008中构建了一个针对.NET2.0的Windows服务。我将它作为控制台应用程序运行以对其进行调试。控制台应用程序运行良好。我把它作为服务放在我的本地计算机上,在Debug模式下编译,仍然运行良好。我现在准备发布,突然,当我将其设置为Release模式时,该服务编译并安装,但没有任何反应。(服务中根本没有代码在运行)。我意识到Release模式与Debug模式是属性配置设置,但似乎在Release模式下,即使我选中defineDEBUGconstant,取消选中Optimizecode,并将Debuginfo设置为“full”,它仍然什么都不做.将其重新设置为调试,它再次正
我想根据#define定义的常量以不同方式编译项目,如下所示:#defineUSE_COMPONENT_X#ifUSE_COMPONENT_X...#endif我可以在C#中做到这一点。但是当我转到同一个项目中的另一个文件时,这个常量没有定义。我能否以某种方式为所有项目定义一个常量,例如DEBUG是这样定义的? 最佳答案 您可以添加/define编译器开关。打开项目的属性页对话框。单击配置属性文件夹。单击构建属性页。修改条件编译常量属性。 关于c#-如何在C#中全局定义常量(如DEBUG
我使用C#(使用VSIDE)进行开发。我对调试/跟踪语句感到困惑。我们在哪里以及为什么使用这些语句?我经常在其他开发人员的源代码中看到这些。谁能指点一下? 最佳答案 Debug语句仅出现在Debug版本中。Trace语句存在于调试和发布版本中。为了调试或检查,您可以将Debug和Trace语句放在要输出某些值的地方。这篇MS支持文章可能会引起您的兴趣:HowtotraceanddebuginVisualC#TheTraceclassroutesmessagestolisteners:classesthataredesignedtoa
最近,我遇到了一个经典的Heisenbug.情况是这样的:我在一个面板中有一个树列表,即主视图,在右侧的另一个面板中有一个详细View,显示有关当前选定树节点的信息。(与Windows资源管理器非常相似。)当我向树中添加一个新节点时(想想在Windows资源管理器中右键单击一个文件夹并说“新建->文件夹”),新创建的节点被选中。问题是:右侧的详细View应该更新以显示新节点。然而,事实并非如此。我必须切换到另一个树节点一次,然后才能在详细View中看到有关新节点的信息。该错误很容易重现,并且在“发布”和“调试”构建配置中都会发生。但是:一旦我在事件处理程序中设置断点(用于“添加新节点”
Typet=obj.GetType();t.IsEnum;t.IsPrimitive;t.IsGenericTypet.IsPublic;t.IsNestedPublict.BaseTypet.IsValueTypeUWP中缺少上述所有属性。我现在如何检查这些类型? 最佳答案 面向UWP的C#应用使用两组不同的类型。您已经知道.NET类型,如System.String,但UWP特定类型实际上是幕后的COM接口(interface)。COM是互操作的super粘合剂,这也是您还可以使用Javascript和C++编写UWP应用程序的基