应用程序在调试器中无法启动

8
我正在处理的应用程序在Visual Studio 2005的调试器中无法启动。
以下是我的步骤:
• 重新构建应用程序并按F5启动
• VS2005窗口的标题显示“projectname (Running)…”
• 调试工具按钮出现,但是变灰了
• 应用程序出现在Windows任务管理器中,但只使用了80k内存
• 长时间没有反应,最终我得到了一个带有以下错误消息的窗口:“正在停止调试,但尚未完成。您可以立即强制停止调试,但被分离的任何进程都可能被终止。此窗口将在调试完全停止时自动关闭”。该窗口不会消失,所以过了一会儿后,我按下“立即停止”按钮。
• 一段时间后,新的窗口出现:“无法启动程序'(path to exe)'。OLE已发送请求并正在等待响应”。最后一句话是瑞典语,意思是“OLE已发送请求并正在等待响应”。我按下OK,调试工具按钮就消失了。
• 应用程序仍在运行,仍然只使用了80k内存。
• 我试图在任务管理器中结束进程,但它却没有被杀死。
• 我退出Visual Studio,最终该进程就消失了。
该应用程序是一个非托管的C++项目,使用许多DLL文件作为插件。我正在使用“多线程调试”运行时,并确保所有依赖项都是针对相同的运行时编译的。
这个问题突然出现了,我在做这个之前一直没有问题。我已经尝试过撤销我的更改,但没有帮助。重新启动计算机也没有帮助。
我随机地将应用程序运行了一两次。如果我然后结束应用程序并重新启动它,它就无法启动。因此,我认为这不是因为我的配置。
有什么想法吗?
另外一个注意事项:如果我从Visual Studio外部启动它,该应用程序会正常启动和运行。
2个回答

2

听起来像是你的程序使用的隐式链接DLL之一中的DllMain()出现了问题。你可以从输出窗口获得提示,它会列出加载的DLL的名称。如果是wininet.dll,则说明你已经陷入了与符号服务器的死锁陷阱。


有趣的是,我现在尝试删除所有插件(所有DLL文件),输出窗口为空。 - Jonatan

1

好的,我解决了我的问题,但我不知道是怎么解决的。

我尝试过的一件事是删除所有构建文件和exe和dll文件,然后重新编译所有内容。但那并没有帮助。

然后我随机尝试了一件事:插件在同一个解决方案中。所以我把它们移除了,然后再次尝试运行。 这次它起作用了! 所以我把所有插件项目都添加回来了,它仍然可以正常工作!

所以,我想我永远不会知道发生了什么。但是将项目从解决方案中移除并添加回去可能也能解决其他人的问题... :)


几次运行后,问题又出现了。但是随机从解决方案中删除任何项目就可以让它再次工作! - Jonatan
更多信息:在出现这个问题之前,我遇到了一些DLL插件使用malloc()分配内存的问题,而另一个DLL使用free()释放了该内存。尽管它们都使用相同的运行时,但结果是断言错误。我通过向调用malloc()的函数提供回调来解决此错误。我还没有修复每个插件,似乎只要我遇到这个错误,这个问题就会出现。然后,在我删除一个项目之前,即使我重新启动VS2005,也无法启动程序... - Jonatan
最终解决方案:我删除了我的解决方案目录,并进行了干净的检出。问题已经永久消失了。可能是某个构建文件损坏了,并且没有被“清理解决方案”命令删除。我保留了旧目录,以便进一步调查。 - Jonatan
无论我创建多少新的解决方案/项目,我仍然无法运行我的应用程序。 :( - user295190
我遇到了相同的错误,应用程序没有启动...我的项目有一个Web项目和Windows应用程序。我首先运行了Web页面,然后通过同一sln上的调试选项启动了Windows应用程序。 - dankyy1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接