Tag: 调试

调试时无法进入迭代器块(C#)

我正在尝试调试从unit testing项目执行的代码,但是当我尝试进入某个方法时,它只是直接进入下一行,并且该方法内的断点未被命中。 该方法位于一个不同项目的类中,但所有代码都是在调试模式下构建的,我尝试过清理和重建解决方案,没有任何乐趣。 但是,这只是因为我在方法中添加了一个迭代器块。 当我删除它并重建时,我可以介入。 奇怪的? 我正在使用Visual Studio 2010 Beta 1,这可能只是一个错误吗?

检查返回值而不将其赋值给变量

我有以下代码剪切: … var tpc = new ThirtPartyClass(); tpc.ExecuteCommand(); tpc.ExecuteCommand(); … ExecuteCommand()方法返回带有一些信息的int值。 对于调试,我想知道这个返回值。 但我不想将结果分配给变量(var result = tpc.ExecuteCommand())。 VisualStudio 2010中是否有可能在调试期间检查此返回值而不将其分配给临时变量? 提前感谢您的建议 编辑:最后,此function已添加到VS2013

VS2010中的调试问题

好的,奇怪的事情再次发生在我身上。 今天早上,当我启动我的ASP.NET应用程序时,对它进行了一些处理,现在当我尝试发布它时。 我收到一个错误,我似乎无法找到任何文档 Error 1 Unable to apply a change while debugging. Source file ‘\Properties\AssemblyInfo.cs’ was reloaded. You must restart the debugging session. 谁知道该怎么办?

有没有办法*完全*禁用编辑并继续?

我想知道在Visual Studio 2008中调试它时是否有办法完全锁定我的代码。代码文件在作为64位应用程序运行时自动锁定,我更喜欢; 但是,我的大部分编码都是为Excel创建加载项,这是32位。 结果是,即使我以’AnyCPU’为目标,VS主机也知道它在32位进程内运行,因此,当代码在Visual Studio中托管时,源代码未被锁定。 我可以通过转到“工具”>“选项”>“调试”>“编辑并继续”,然后取消选中“启用编辑并继续”复选框来关闭“编辑并继续”。 但是,这并不能完全锁定代码。 这样可以防止代码中的任何编辑在当前运行中执行,但它不会阻止鼠标单击或击键实际更改代码。 同样,当使用64位应用程序时,这不会发生 – 代码完全被锁定。 我非常希望代码完全锁定至少有几个原因: 调试时我可能会意外碰到一个键或类似物,我绝对不想这样做。 这很罕见,但这是一个问题。 我的许多自动化测试通过SendKeys驱动用户界面。 但是,当使用调试器逐步完成这样的测试时,我有时会忘记某些方面涉及SendKeys,这意味着击键最终会被发送到Visual Studio IDE而不是Excel。 在上面的问题#2中,unit testing失败,这很好 – 我的不好 – 但是将所有键击发送到代码模块并破坏我的代码是完全不可接受的。 这里有没有人有任何想法? 在针对32位CPU编译时,可以在Visual Studio中运行托管时完全锁定代码吗? 关于这个问题的一些相关post,但没有一个直接解决这个问题: 如何:启用和禁用编辑并继续 在Visual Studio 2008中进行调试时,“不允许对64位应用程序进行更改” 如何在Visual Studio的调试模式下启用文件编辑? “编辑并继续”如何在Visual Studio中工作? 我们可以在运行应用程序时编辑代码 在调试时编辑C# 提前感谢任何帮助或想法…… 麦克风

VS调试并观察变量的变量

我在一个类中的属性正在被某些东西改变。 我更改此代码值的唯一地方是一行如下所示: pushpin.Position.Altitude = -31; 在visual studio调试期间,是否有一种方法可以观察。对所做的任何更改的优势,最好是在更改值的赋值语句中中断。 如果这是追踪此问题的正确方法,我是否可以获得有关如何执行此操作的分步教程/说明? 谢谢。

.NET 4:托管代码是否会导致堆损坏?

我的multithreading托管程序中存在堆损坏。 做一些测试我发现只有当程序中的后台线程处于活动状态时才会发生损坏(它们是可切换的)。 线程使用一些第三方组件。 在检查了线程和第三方组件的代码(使用.NET Reflector)后,我发现它们都是托管的,即没有 “不安全”或“DllImportAttribute”或“P / Invoke”。 似乎纯托管代码导致堆损坏,这可能吗? UPDATE 除了使用Marshal类之外, 是否有可能在线程未正确同步的情况下破坏堆 ? 一个例子将非常感激。

generics类上的DebuggerDisplay

我在generics类上应用DebuggerDisplay属性时遇到问题: [DebuggerDisplay(“–foo–“)] class Foo { } [DebuggerDisplay(“Bar: {t}”)] class Bar { public T t; } 当检查Bar类型的对象时,我希望它显示为Bar: –foo– ,但我得到Bar: {Foo} 我究竟做错了什么?

为什么断点的条件无法执行?

我想暂时禁用一个断点,所以我设置了一个条件断点,条件如下: (global::System.DateTime.Now<new global::System.DateTime(2014,03,28,11,0,0)) 当这个断点被击中时,弹出一个对话框,说 The condition for a breakpoint failed to execute. The condition was ‘(global::System.DateTime.Now<new global::System.DateTime(2014,03,28,11,0,0))'. The error returned was 'The runtime has refused to evaluate the expression at this time.'. Click OK to stop at this breakpoint. 为什么运行时拒绝评估表达式? 如果不修改调试的源代码,我该怎么做才能获得所需的行为?

断言调试器断言失败

当assertion为false并使用Visual Studio调试器运行应用程序时,有没有办法打破调试器。 早些时候,当我调试Windows应用程序时,我会得到一个exception并且调试器会中断,但是现在在智能设备上,断言失败窗口会显示堆栈跟踪,但我还希望看到变量值等。

为什么调试器的断点条件允许赋值语句为bool-condition?

这是非常危险的,所以我想知道为什么它是允许的。 由于我经常需要在VB.NET和C#之间切换,我有时会添加断点条件,如下所示: foo = “bah” 我想停止,如果string变量foo是”bah ,所以正确的方法是使用foo == “bah”而不是foo = “bah” 。 但它“有效”。 在编译或运行时,您不会收到任何警告或错误。 但实际上这会修改变量foo ,即使它有不同的值,它也总是”bah” 。 由于这种情况无声地发生(断点永远不会被击中),因此非常危险。 为什么允许? 我的推理错误在哪里(除了混淆C#和VB.NET语法)? 在C#中(与VB.NET相反) 赋值语句返回已分配的值,因此不是bool ,而是在这种情况下为string 。 但是如果你选中“Is True”框,断点条件必须是一个bool 。 这是一个小样本“程序”和我(德国)IDE的截图: static void Main() { string foo = “foo”; // breakpoint with assignment(foo = “bah”) instead of comparison(foo == “bah”): Console.WriteLine(foo); // bah, variable is changed from the […]