Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在应用程序运行时随时启动Visual Studio调试器_C#_Visual Studio 2010_Debugging - Fatal编程技术网

C# 在应用程序运行时随时启动Visual Studio调试器

C# 在应用程序运行时随时启动Visual Studio调试器,c#,visual-studio-2010,debugging,C#,Visual Studio 2010,Debugging,我正在使用VisualStudio开发一个应用程序,当我在客户机上安装它(通过Setup Project、.msi文件)并运行它时,我会遇到一些“Heisenbug”异常。 我几乎可以肯定错误来自代码路径的前面,所以我想调试它 事实是:当应用程序崩溃时,会显示以下对话框(当然是指我的应用程序而不是Windows资源管理器): 如果我选择“调试程序”,VisualStudio调试器(在部署的计算机中以某种方式可用)将启动并显示异常的详细信息 我想做的是从一开始就开始调试会话,这样我可以继续点击F

我正在使用VisualStudio开发一个应用程序,当我在客户机上安装它(通过Setup Project、.msi文件)并运行它时,我会遇到一些“Heisenbug”异常。 我几乎可以肯定错误来自代码路径的前面,所以我想调试它

事实是:当应用程序崩溃时,会显示以下对话框(当然是指我的应用程序而不是Windows资源管理器):

如果我选择“调试程序”,VisualStudio调试器(在部署的计算机中以某种方式可用)将启动并显示异常的详细信息

我想做的是从一开始就开始调试会话,这样我可以继续点击F10和F11并检查一些中间值


有人知道如何在应用程序运行时随时启动Visual Studio调试会话吗?并不是说我正在运行已部署的应用程序,也不是从Visual Studio启动它。

因为您已经在运行已部署应用程序的计算机上启动并运行了Visual Studio,所以应该很简单:

  • 运行应用程序
  • 在VisualStudio中加载项目
  • 转到调试->附加到进程
  • 将弹出一个包含所有正在运行的进程的列表

    从列表中,选择与应用程序对应的进程,该进程应以exe命名(如果按数字ID排序,很可能接近最高端)

  • 单击“附加”,VisualStudio将开始调试,与通常使用F5启动时的调试类似



  • 我还有另一个建议:执行heavy日志记录,直到你把一切都弄清楚。写下您有疑问的所有内容,以便在出现问题时进行进一步分析:值、查询等。

    由于您已在运行已部署应用程序的计算机上启动并运行Visual Studio,因此应该很简单:

  • 运行应用程序
  • 在VisualStudio中加载项目
  • 转到调试->附加到进程
  • 将弹出一个包含所有正在运行的进程的列表

    从列表中,选择与应用程序对应的进程,该进程应以exe命名(如果按数字ID排序,很可能接近最高端)

  • 单击“附加”,VisualStudio将开始调试,与通常使用F5启动时的调试类似


  • 我还有另一个建议:执行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();