【发布时间】:2012-10-12 12:11:06
【问题描述】:
我在调试 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 中有一条信息,断点不会被命中,因为没有加载调试符号 - 请注意在 the third image attached 中加载了调试符号(红色圆圈是实心的,没有感叹号)。
更新 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)") - 调试器在断点处停止。
已在connect 上发布 - 等待解决方案。如果您遇到与此更新中所述相同的问题,请投票。
更新 5
我刚刚在 a simple managed shell extension 上对其进行了测试,因此它与 SolidWorks Enterprise PDM 无关。
我还在连接上发布了a more precise bug。
更新 6
截至 2013 年初,Microsoft 声称 调试器未按预期运行是一个设计决策。第一个连接错误报告中的更多详细信息。
【问题讨论】:
-
杀死并重新启动 Explorer 以调试特定于供应商的插件模型是非常没有意义的。而是启动供应商的应用程序。请联系该供应商以获得支持。
-
EPDM 安装为 Windows 资源管理器扩展 - 这就是我调试 explorer.exe 的原因(它适用于 VS2010)。我会验证是否有任何其他进程以它开始。
标签: c# debugging visual-studio-2012 breakpoints windows-explorer