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

Start Visual Studio Debugger at any time while application is running

我正在使用 Visual Studio 开发应用程序,当我在客户端机器上安装它(通过安装项目,.msi 文件)并 运行 它时,我得到了一些 "Heisenbug" 例外。 我几乎可以肯定错误来自代码路径的早期,所以我想调试它。

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

如果我选择 "Debug the program",Visual Studio 调试器(它在已部署的机器中以某种方式可用)启动并显示异常的详细信息。

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

任何人都知道如何在应用程序 运行ning 时随时启动 Visual Studio 调试会话?并不是说我 运行 正在部署应用程序,而不是从 Visual Studio.

启动它

由于您已经 Visual Studio 启动并且 运行 在机器上 运行 部署的应用程序,它应该很简单:

  1. 运行 申请
  2. 加载 Visual Studio
  3. 中的项目
  4. 转到 DEBUG -> 附加到进程...
  5. 将弹出一个包含所有 运行 个进程的列表

    从列表中选择应用程序对应的进程,以你的exe命名(如果按数字ID排序,很有可能靠近最靠前的)

  6. 单击 "Attach",Visual Studio 将开始调试,就像您通常使用 F5.

    开始调试一样

我还有另一个建议:实施 heavy 日志记录,直到您弄清楚所有事情为止。写下您有疑问的所有内容,以备进一步分析,以防出现问题:值、查询等

您可以启动 application directly under the Visual Studio Debugger using the debugexe parameter:

devenv /debugexe “C:\MyApplication\Debug\MyApplication.exe”

这将启动应用程序并立即附加调试器。否则很难调试应用程序启动时发生的问题。您将无法及时手动附加以捕获在此期间发生的任何事件。

您还可以将以下代码放在应用程序的第一行(通常是 Main(string[] args))到 force a debugger to attach and cause the application to break immediately:

System.Diagnostics.Debugger.Break();

如果您的应用程序启动并运行良好一段时间,您可以使用@Alex 所述的"Attach to Program" 功能。

如果您在目标机器上没有可用的源代码,您可以复制它们,或者如果您使用的是 TFS Team Build 的源代码和符号索引功能,您可以告诉调试器去哪里找用于您的调试符号(然后将自动解析为 TFS 源代码管理)。