C# 在应用程序运行时随时启动Visual Studio调试器
我正在使用VisualStudio开发一个应用程序,当我在客户机上安装它(通过Setup Project、.msi文件)并运行它时,我会遇到一些“Heisenbug”异常。 我几乎可以肯定错误来自代码路径的前面,所以我想调试它 事实是:当应用程序崩溃时,会显示以下对话框(当然是指我的应用程序而不是Windows资源管理器): 如果我选择“调试程序”,VisualStudio调试器(在部署的计算机中以某种方式可用)将启动并显示异常的详细信息 我想做的是从一开始就开始调试会话,这样我可以继续点击F10和F11并检查一些中间值C# 在应用程序运行时随时启动Visual Studio调试器,c#,visual-studio-2010,debugging,C#,Visual Studio 2010,Debugging,我正在使用VisualStudio开发一个应用程序,当我在客户机上安装它(通过Setup Project、.msi文件)并运行它时,我会遇到一些“Heisenbug”异常。 我几乎可以肯定错误来自代码路径的前面,所以我想调试它 事实是:当应用程序崩溃时,会显示以下对话框(当然是指我的应用程序而不是Windows资源管理器): 如果我选择“调试程序”,VisualStudio调试器(在部署的计算机中以某种方式可用)将启动并显示异常的详细信息 我想做的是从一开始就开始调试会话,这样我可以继续点击F
有人知道如何在应用程序运行时随时启动Visual Studio调试会话吗?并不是说我正在运行已部署的应用程序,也不是从Visual Studio启动它。因为您已经在运行已部署应用程序的计算机上启动并运行了Visual Studio,所以应该很简单:
我还有另一个建议:执行heavy日志记录,直到你把一切都弄清楚。写下您有疑问的所有内容,以便在出现问题时进行进一步分析:值、查询等。由于您已在运行已部署应用程序的计算机上启动并运行Visual Studio,因此应该很简单:
我还有另一个建议:执行heavy日志记录,直到你把一切都弄清楚。写下所有您有疑问的内容,以便在出现问题时进行进一步分析:值、查询等。您可以开始: devenv/debugexe“C:\MyApplication\Debug\MyApplication.exe” 这将启动应用程序,并立即连接调试器。否则,很难调试在应用程序启动时发生的问题。您将无法及时手动附加以捕获在此期间发生的任何事件 您还可以将以下代码放在应用程序的第一行(通常是Main(string[]args)),以便: 如果应用程序启动并正常运行一段时间,您可以使用@Alex描述的“附加到程序”功能 如果目标计算机上没有可用的源代码,您可以复制它们,或者如果您正在使用TFS Team Build的源代码和符号索引功能,您可以告诉调试器在哪里查找调试符号(然后将自动解析为TFS源代码控制)。您可以启动: devenv/debugexe“C:\MyApplication\Debug\MyApplication.exe” 这将启动应用程序,并立即连接调试器。否则,很难调试在应用程序启动时发生的问题。您将无法及时手动附加以捕获在此期间发生的任何事件 您还可以将以下代码放在应用程序的第一行(通常是Main(string[]args)),以便: 如果应用程序启动并正常运行一段时间,您可以使用@Alex描述的“附加到程序”功能
如果目标计算机上没有可用的源代码,则可以复制它们,或者如果使用TFS Team Build的源代码和符号索引功能,则可以告诉调试器在何处查找调试符号(然后将自动解析为TFS源代码管理).是否尝试附加到进程?运行Visual Studio并选择“调试/附加到进程…”。。。选择您的进程。调试->附加到进程是您可以做的。我认为您应该考虑在代码中使用Log4NET+或任何其他框架添加跟踪/日志记录。这是将来会出现的许多错误之一。@quamrana您的评论就是我想要的答案!是否尝试附加到进程?运行Visual Studio并选择“调试/附加到进程…”。。。选择您的进程。调试->附加到进程是您可以做的。我认为您应该考虑在代码中使用Log4NET+或任何其他框架添加跟踪/日志记录。这是将来会出现的许多错误之一。@quamrana您的评论就是我想要的答案!当您说“在VisualStudio中加载项目”时,如果目标计算机中没有源代码,我应该怎么做?如果您有源代码,您可以放置断点并轻松处理。jessehouwing的优秀答案涵盖了所有其他来源不可用的情况!即使没有源代码,也可以使用“函数中断”功能放置断点。请看:接受这个,因为我最终尝试了一个简单的调试,并且确信我真正要做的是实现大量日志记录。感谢@jessehouwing给出的非常透彻的回答,也许有一天我会达到将所有这些付诸实践所需的成熟度!当你说“加载
System.Diagnostics.Debugger.Break();