2

我在调试 SolidWorks Enterprise PDM 插件时遇到问题。我不知道如何在 EPDM 中处理插件,但问题似乎与 Visual Studio 有关 - 也许其他人与其他平台的插件有类似的问题。

添加调试插件(以便使用最新源): PDM 调试插件

在 Visual Studio 2010 Express 中没有问题 - 杀死资源管理器,启动它,附加到它,然后: VS2010调试成功

我无法使用 Visual Studio 2012 Express 实现同样的效果。虽然它似乎正在调试资源管理器(文件是只读的,显示停止调试按钮),但它没有遇到断点: VS2012调试失败

我在 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 似乎只在托管模式下运行: 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 声称调试器未按预期运行是一个设计决定。第一个连接错误报告中的更多详细信息。

4

1 回答 1

1

当您构建一个.dll(我假设它以这种方式加载到资源管理器中)时,断点总是有问题(至少根据我的经验),因为您无法提前知道文件将在内存中加载的位置,因此很难添加一个断点。

您可以尝试在代码中添加手动断点调用(即int3)。在 C++ 中,这将是:

asm {
    int 3;
}

在 C#中有一个方法

System.Diagnostics.Debugger.Break()

尝试添加到函数/代码部分的开头(不要忘记在调试模式下共同编译)。

然后您将开始调试.exe加载文件和加载库的应用程序 ().dll应该触发断点。

于 2012-10-23T06:43:12.453 回答