0

当我运行调试器时,没有命中在Visual Studio中为C++项目设置的断点。Visual Studio中C++的断点

当我启动调试器我得到警告

调试信息“IEXPLORER.EXE”无法找到或不匹配。没有符号加载。你想开始调试吗?

我打yes继续,但随后的断点我设置有一个警告说:

断点不会被击中当前。此文档没有符号加载

如何在调试项目时加载符号?我需要改变它的构建方式吗?

回答

0

我要检查的第一件事是您正在调试模式下构建。有一个组合框,您可以在工具栏中选择Release和Debug模式。

在Release中,不包含调试信息。

第二件事是确保您将调试附加到正确的过程。您可以开始连接到进程(F5),也可以开始连接(Ctr-F5),然后手动连接(通过“调试”菜单,附加到进程)。

IEXPLORER是您当前附加的过程。你确定这是正确的吗?

+0

我正在构建一个IE插件,所以是的,它应该是我附加的IEXPLORER。我打F5以调试模式启动,当它运行时,Stop-Debugging菜单项可用,所以我认为它确实在运行。 – opsb 2010-11-01 11:56:09

2

最新的Internet Explorer有不同的过程模型,它固有地禁用了ActiveX控件的调试(我认为你正在尝试调试)。有一个注册表设置,但可能会帮助你。

HKLM \软件\微软\的Internet Explorer \首页> TabProcGrowth:DWORD

将该值设置为0,你应该能够控制调试。

+0

我使用的是IE8,因此我尝试设置此键并重新启动Visual Studio。不幸的是,我仍然没有得到任何输出。 – opsb 2010-11-01 12:14:43

+0

解决了我的问题 – michaelr524 2013-02-20 19:40:32

1

它看起来像你想如果Internet Explorer给你的麻烦连接到正确的流程来调试扩展到Internet Explorer(工具栏,BHO等)

,你可以让你的进程崩溃上然后JIT调试它。在DllMain中使用DbgBreakPoint来做到这一点。 Visual Studio应该弹出一个窗口,询问您是否要调试它。这有点落后,但应该帮助您避免IE浏览器可能会执行的所有过程。

这也将允许您看到来自其他问题的调试输出,因为您将附加正确的过程。

1

您必须确保的三件事情:

  • 生成.pdb文件,其中包含在那里你试图打破代码的DLL,并确保该.pdb文件包含源信息。如果你告诉我你使用哪种IDE /语言,我可以帮你确保。
  • 确保您的调试器找到这个.pdb文件;一个简单的方法是复制。pdb文件接近你的二进制文件。如果加载了.pdb文件,Visual Studio菜单Debug\Windows\Modules中的工具窗口应在DLL文件行处的'Symbol Status'列中显示'Symbol Loaded'。
  • 如果您使用另一台计算机进行调试,而不是用于生成DLL文件的计算机,请确保两台计算机上的源文件位于相同路径。

有了这个,你的断点应该没问题。

0

我遇到了这个问题,我能解决它的唯一方法是覆盖“附加到进程”中的“自动确定要调试的代码类型”选项。一旦我清除了“Silverlight”调试类型,那么所有正确的模块出现在iexplore.exe下,我的断点点亮了,并且我能够适当地进行调试。不知道为什么这是必要的,或者一直都是这样,但这对我来说是有效的。