Debugging 为什么当VisualStudio显示调试消息时,DebugView不显示调试消息

Debugging 为什么当VisualStudio显示调试消息时,DebugView不显示调试消息,debugging,internet-explorer,bho,debugview,Debugging,Internet Explorer,Bho,Debugview,我正在开发一个运行在Internet Explorer中的浏览器助手对象。我正在用ATLTRACE(“…”)编写调试消息当VisualStudio连接到iexplore.exe进程时,这些选项看起来很好,但这对于快速测试来说很慢。DebugView没有从我的BHO中捕获任何内容 为什么DebugView不显示BHO调试消息?这与Internet Explorer在低完整性级别下运行有关吗?假设您在Vista或更高版本上运行IE(这听起来像是因为您在谈论完整性级别),您可以将DebugView的完

我正在开发一个运行在Internet Explorer中的浏览器助手对象。我正在用
ATLTRACE(“…”)编写调试消息当VisualStudio连接到
iexplore.exe
进程时,这些选项看起来很好,但这对于快速测试来说很慢。DebugView没有从我的BHO中捕获任何内容


为什么DebugView不显示BHO调试消息?这与Internet Explorer在低完整性级别下运行有关吗?

假设您在Vista或更高版本上运行IE(这听起来像是因为您在谈论完整性级别),您可以将DebugView的完整性级别设置为较低的完整性,以便任何应用程序都可以向其发送消息:

icacls dbgview.exe /setintegritylevel low
如果您不喜欢将dbgview永久设置为低完整性的想法(这可能会使保存日志和其他内容有点麻烦,因为它们只会进入低完整性存储),您可以使用Sysinternals的
psexec
工具在低完整性下运行dbgview的特定实例:

psexec -l dbgview

最后,如果您所担心的只是加载VS调试器以附加到进程所需的时间,那么您可以使用命令行调试器(如ntsd.exe或cdb.exe)。Ntsd.exe随Windows提供,但随附了更新版本,其中还包括非常类似的cdb.exe。

对于快速测试,Visual Studio是否仍在运行?如果是这样的话,这可能会导致这个问题。

这听起来很奇怪,您是否有更多关于为什么会这样的详细信息?跟踪使用OutputDebugString,而不是消息传递。我记得OutputDebugString使用一个带有互斥锁和事件的共享内存部分来传递数据。我假设(可能是错误的)打开共享部分或从低完整性进程向高完整性进程发送信号事件被阻止了。模糊地回忆起过去类似的问题,我忘记了我是如何解决的。在低位运行DbgView可以完成这项工作,但相当烦人!时间方面,它的VisualStudio加载IE符号需要时间。我可能可以加快一点速度。如果你不需要符号,你可以禁用自动符号加载,然后根据需要(如果需要)惰性加载。如果你使用icacls方法并将DbgView.exe固定到Windows 7任务栏,每次启动它时都会收到恼人的安全警告。支持psexec方法的另一个原因(或者希望DbgView被更新以自行正确处理捕获低IL消息)。我遵循您的思路-Visual Studio正在运行,但未调试。只是为了确认:仅运行Visual Studio确实会截获消息,并阻止它们在DebugView中可见。仅仅在其中不运行调试会话是不够的。作为一种解决方法,如果在VisualStudio之前启动DebugView,它似乎仍然显示所有消息。