【问题标题】:Why does DebugView not show debugging messages when Visual Studio does为什么 DebugView 不显示调试消息而 Visual Studio 显示
【发布时间】:2012-11-19 22:19:04
【问题描述】:

我正在开发一个在 Internet Explorer 中运行的浏览器帮助对象。我正在使用ATLTRACE("..."); 编写调试消息,当Visual Studio 附加到iexplore.exe 进程时,这些消息看起来很好,但这对于快速测试来说很慢。 DebugView 没有从我的 BHO 中捕获任何内容。

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

【问题讨论】:

    标签: debugging internet-explorer bho debugview


    【解决方案1】:

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

    icacls dbgview.exe /setintegritylevel low
    

    如果您不喜欢将 dbgview 永久设置为低完整性的想法(这可能会使保存日志等有点痛苦,因为它们只会进入低完整性存储),您可以运行特定的使用 Sysinternals 的 psexec 工具的低完整性 dbgview 实例:

    psexec -l dbgview
    

    最后,如果您只担心加载 VS 调试器以附加到进程所需的时间,您可以使用命令行调试器(如 ntsd.exe 或 cdb.exe)。 Ntsd.exe 随 Windows 一起提供,但较新的版本随 "Debugging Tools for Windows" package 一起提供,其中还包括非常相似的 cdb.exe。

    【讨论】:

    • 这听起来很奇怪,您是否有更多详细信息说明为什么会这样?跟踪使用的是 OutputDebugString,而不是消息传递。
    • 我的回忆是,OutputDebugString 使用了一个带有互斥体和事件的共享内存部分来传递数据。我假设(可能不正确)打开共享部分或将事件从低完整性进程发送到高完整性进程被阻止。
    • 试一试 psexec - 效果很好。模糊地回忆起过去类似的问题,我忘记了我是如何解决的。在低位运行 DbgView 可以完成这项工作,但很烦人!就时间而言,它的 Visual Studio 加载 IE 符号需要时间。我可能会加快一点。
    • 如果您不需要符号,您可以禁用自动符号加载,然后在需要时懒惰地加载它们。
    • 如果您使用 icacls 方法并将 DbgView.exe 固定到 Windows 7 任务栏,则每次启动它时都会收到烦人的安全警告。支持 psexec 方法的另一个原因(或希望更新 DbgView 以自行正确处理捕获低 IL 消息)。
    【解决方案2】:

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

    【讨论】:

    • 我遵循您的思路 - Visual Studio 正在运行,但未调试。
    • 只是为了确认:只是运行 Visual Studio 会拦截消息并阻止它们在 DebugView 中可见。仅仅不在其中运行调试会话是不够的。作为一种解决方法,似乎如果您在 Visual Studio 之前启动 DebugView,它仍然会显示所有消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    相关资源
    最近更新 更多