从 Visual Studio 调试独立的 exe

Posted

技术标签:

【中文标题】从 Visual Studio 调试独立的 exe【英文标题】:Debug a standalone exe from Visual Studio 【发布时间】:2017-07-13 06:45:01 【问题描述】:

我有一个可以在我的机器上完美运行的可执行文件。它恰好是使用 Visual Studio 2015 社区创建它的机器。

但它无法在其他机器上运行并创建“程序已停止工作”和“您要发送有关该问题的更多信息”消息。

我怎样才能将这个程序的所有调试信息捕获到一个文件中,以便找出程序在哪里中断。在 promgram.cs 文件运行之前它似乎失败了,因为我将 msgbox 作为它永远不会到达的第一行,所以我只能假设它在初始框架加载或类似情况下失败。

【问题讨论】:

【参考方案1】:

我相信您需要使用应用程序创建的原始 PDB 文件。这里有一个相关的帖子: How do I use PDB files

【讨论】:

【参考方案2】:

有几种方法可以做到这一点:

重要提示:您必须具有有效的调试符号才能查看源文件、具有有意义的调用堆栈帧并命中断点。如果您还没有构建应用程序时生成的 pdb,您可以重新构建新构建的 exe 并将其复制到您的另一台机器上。

使用 Windows 错误报告收集可以在 Visual Studio 中打开的转储

在你的应用崩溃的机器上写一些注册表值,让它崩溃。将转储文件复制到您的开发机器并使用 Visual Studio 打开以进行调试。

使用下面的命令开始 - 您必须将“YourApp.exe”替换为您的 exe 的实际名称。转储的默认目录是 %LOCALAPPDATA%\CrashDumps

reg add "HKLM\Software\Microsoft\Windows\Windows Error Reporting\LocalDumps\YourApp.exe" /v DumpType /t REG_DWORD /d 2

有关完整详细信息,请参阅 Windows documentation。

使用 EXE 项目和远程调试器远程启动程序

    在应用崩溃的机器上,安装 Visual Studio 远程工具并启动远程调试器。

    在您的开发机器上,启动 Visual Studio,打开项目 (Ctl + Shift + o),然后选择您的应用程序的 exe 文件。 (它需要与崩溃的机器完全匹配,因此您可能需要创建一些目录和一个空文本文件并将扩展名更改为 .exe)

    示例:如果您的应用位于 E:\Program Files (x86)\MyCoolApps\bin\MyCoolApp.exe 的完整路径,您必须在完全相同的位置创建一个文件(可以为空)即使同一个应用程序已经位于 C:\Program Files (x86)\MyCoolApps\bin\x86\MyCoolApp.exe

    打开项目属性(在解决方案资源管理器中右键单击项目节点)

    用适合您环境的值填写相应的字段(以粗体显示)。您应该将调试器类型更改为您的 exe 是什么(C#/VB 托管或 C/C++ 本地)。

    现在您已准备好在调试器下启动您的应用。与 Visual Studio 中的任何其他项目一样,按 F5 进行调试。

【讨论】:

以上是关于从 Visual Studio 调试独立的 exe的主要内容,如果未能解决你的问题,请参考以下文章

调试期间在 Visual Studio 中自动附加到子进程

如何在 Visual Studio 中使用 .NET 5(独立进程)调试 Azure Functions?

Visual Studio 2010 远程调试 - 无法连接:拒绝访问

如何在 Visual Studio 中创建独立的 exe? [复制]

Visual Studio 2017 调试器的工作进程(msvsmon.exe)意外退出 调试将终止

关于 MSVSMON.EXE 的 Visual Studio 调试错误似乎没有运行