我在调试 SolidWorks Enterprise PDM 插件时遇到问题。我不知道如何在 EPDM 中处理插件,但问题似乎与 Visual Studio 有关 - 也许其他人与其他平台的插件有类似的问题。
添加调试插件(以便使用最新源):
在 Visual Studio 2010 Express 中没有问题 - 杀死资源管理器,启动它,附加到它,然后:
我无法使用 Visual Studio 2012 Express 实现同样的效果。虽然它似乎正在调试资源管理器(文件是只读的,显示停止调试按钮),但它没有遇到断点:
我在 Windows 7 Professional x64 上工作。插件是使用 .NET 3.5 构建的。我已经使用了 VS2010 和 VS2012 解决方案来解决同样的问题。
我确实重新启动了 explorer.exe,所以加载了最新版本的插件。项目使用启动操作“explorer.exe”:
<StartAction>Program</StartAction>
<StartProgram>$(windir)\explorer.exe</StartProgram>
<StartArguments></StartArguments>
我不知道为什么没有命中断点,非常感谢任何帮助。
谢谢!
更新 1
我已经检查了 Hans 的建议——还有另外两个进程正在启动,但附加到它们并没有产生任何结果。
这又指出了一件事——当我附加到这些进程时,VisualStudio 中有一条信息,断点不会被命中,因为没有加载调试符号——请注意,在附加的第三张图像中加载了调试符号(红色圆圈已填充且没有感叹号)。
更新 2
当我将 VisualStudio 附加到托管 explorer.exe 时 - 断点被击中!
explorer.exe 似乎只在托管模式下运行:
它甚至可以同时在两种模式下运行:
所以问题是如何强制 VisualStudio 在托管模式下启动 explorer.exe?
更新 3
它可能是 VisualStudio 2012 的错误吗?
使用 VS2010 进行调试时,资源管理器以正常模式启动,但加载插件后,它立即切换到托管模式,并且 VS2010 在断点处停止。
与 VS2012 不同 - 加载插件时,explorer.exe 不会切换到托管模式,并且(因此?它是否连接?)断点不会被命中。
但是当 VS2012 附加到已经处于托管模式的 explorer.exe 时,它会在断点处停止。
更新 4
我已经设法解决了问题的本质 - 当将 VS2012 附加到另一个进程(例如 explorer.exe)时,选择了“自动确定要调试的代码类型”,并且该进程以本机模式启动,稍后加载托管代码 - 调试器不会在断点处停止。当附加到或附加到明确选择的代码类型(“托管(v3.5,v3.0,v2. 0)") - 调试器在断点处停止。
已在连接上发布- 等待解决方案。如果您遇到与此更新中所述相同的问题,请投票。
更新 5
我刚刚在一个简单的托管外壳扩展上对其进行了测试,因此它与 SolidWorks Enterprise PDM 无关。
我还在连接上发布了一个更精确的错误。
更新 6
截至 2013 年初,Microsoft 声称调试器未按预期运行是一个设计决定。第一个连接错误报告中的更多详细信息。