在VS2013下使用VS2010进行远程调试的最佳实践

时间:2016-05-12 18:21:24

标签: visual-studio-2010 visual-studio-2013 windows-embedded

我正在为那些为Visual Studio2013中嵌入的Windows XP开发,然后在Visual Studio 2010中调试的人寻找技巧。

有关此问题的原因在本Stack Overflow Link中讨论了该主题。

本质上远程调试协议在VS2010之后发生了变化,而使用新VS2013协议的新msvsmon.exe不支持XP嵌入式调试。所以我们被迫进入一个TWO IDE解决方案,一个用于构建,另一个用于调试。 VS2013用于构建,VS2010用于启动远程调试会话。

关于购买VS2013和VS2010的要求存在一些错误信息。从前面提到的链接看来,可以免费获得VS2010调试环境。我能够验证组件的免费下载,但没有时间验证调试环境是否正常工作。我使用的环境包括VS2013的许可副本和VS2010的许可副本。

以下是我在前VS6 msvsmon.exe环境中没有看到进行远程调试的两个初始问题:

1)对于VS2013构建项目,VS2010不想打开* .sln文件。如果我打开VS6 .dsp / .dsw,我们从VS2010移植了一次“一次转换”,它破坏了我精心构建的VS2013构建项目。   我似乎必须构建两个不同的解决方案空间,一个名为SOLUTION_NAME_VS2013,另一个名为SOLUTION_NAME_VS2010。我很想知道是否有更优雅的解决方案来管理一组带有两个不同的“Highlander”(只能有一个)IDE的BUILD文件。

2)当远程启动项目时,如果崩溃我在Win2012调试主机(运行VS2010)上遇到了一个令人讨厌的“你的程序崩溃”对话框,它会从调试器中捕获崩溃信号。大约30%的时间,它检测VS2010的运行实例,70%的时间没有检测到。 CrashDialog

3)msvmon超时(需要重启)并需要额外的时间/鼠标点击来设置旧的vs6 msvcmon.exe

我想知道其他Windows Embedded开发人员是否为这些问题找到了优雅的解决方案。如果我找到更多的提示,我会发布我在这里发现的内容。

1 个答案:

答案 0 :(得分:1)

问题#1:无法读取VS2010中的VS2013 * .sln文件

问题是Visual Studio 2010的VERSION必须至少是SERVICE PACK1。早期版本的Visual Studio 2010无法读取VS2012 / VS2013 / VS2015解决方案文件。

Screenshot of Working vs non Working VS2010

问题2:您的程序崩溃了对话框,阻止信号到达调试器

Stack Overflow link很有帮助。有多种方法可以抑制"你的程序已崩溃"对话。在我的例子中,用户可能需要在生产系统上调试新的应用程序,因此全局更改设置并不理想。

我从this Raymond Chen link中选择解决方案,它允许我按应用程序禁用应用程序上的对话框。由于我通常可以访问源代码,因此调试这对我来说是最好的解决方案。

DWORD dwMode = SetErrorMode(SEM_NOGPFAULTERRORBOX);
SetErrorMode(dwMode | SEM_NOGPFAULTERRORBOX);

我仍然偶尔会看到一个问题,即Windows运行时没有在崩溃时看到正在运行的调试器实例,并且想要启动一个新的调试器实例。这似乎发生在~30%的时间。当我弄清楚导致什么时,我会在这里更新它。

最后,新的远程调试客户端更改为msvmon.exe,这提高了安全性。要保存额外的鼠标单击,以下命令可用于在远程Windows Embedded XP客户端上运行:

"Path\to\msvsmon.exe" /anyuser /noauth /nosecuritywarn /timeout:2147483646

/noauth/anyuser需要/nosecuritywarn/timeout最大值可使调试器客户端在空闲时间约为1小时后终止。如果您的工作日用于调试,那么您不希望它在咖啡/重建之后超时完成。