我有一个可以在我的机器上完美运行的可执行文件。它恰好是使用 Visual Studio 2015 社区创建它的机器。
但是,它无法在其他机器上运行,并创建“程序已停止工作”和“您是否要发送有关该问题的更多信息”消息。
如何从这个程序中捕获所有调试信息到一个文件中,以便找出程序在哪里中断。在 promgram.cs 文件运行之前它似乎失败了,因为我将 msgbox 作为它永远不会到达的第一行,所以我只能假设它在初始框架加载或类似情况下失败。
我有一个可以在我的机器上完美运行的可执行文件。它恰好是使用 Visual Studio 2015 社区创建它的机器。
但是,它无法在其他机器上运行,并创建“程序已停止工作”和“您是否要发送有关该问题的更多信息”消息。
如何从这个程序中捕获所有调试信息到一个文件中,以便找出程序在哪里中断。在 promgram.cs 文件运行之前它似乎失败了,因为我将 msgbox 作为它永远不会到达的第一行,所以我只能假设它在初始框架加载或类似情况下失败。
有几种方法可以做到这一点:
重要提示:您必须具有有效的调试符号才能查看源文件、具有有意义的调用堆栈帧并命中断点。如果您还没有构建应用程序时生成的 pdb,您可以重新构建新构建的 exe 并将其复制到您的另一台机器上。
在您的应用程序崩溃的机器上写入一些注册表值并让它崩溃。将转储文件复制到您的开发计算机并使用 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文档。
在应用程序崩溃的计算机上,安装 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++ 是本机的)。
现在您已准备好在调试器下启动您的应用程序。按 F5 进行调试,就像您在 Visual Studio 中的任何其他项目一样。
我相信您需要应该使用应用程序创建的原始 PDB 文件。这里有一个相关的帖子: 如何使用 PDB 文件