OutputDebugString() 在 Windows 7x64 上无法工作

8

我的程序在Windows XP上运行良好。我正在尝试添加一些功能,并使用OutputDebugString()来显示一些调试信息,在XP上无缝运行。现在,当我想在Windows 7x64上使用相同的程序时,在DebugView中看不到任何输出。

F1! F1! F1!


OutputDebugString 在 7 x64 上运作正常。DebugView 也能显示应用程序的输出。 - Roman R.
3个回答

12

抱歉,再次提出一个老问题,但我们花了几天时间在互联网上搜索答案,最终不得不记录连接调用。我在此发布帖子,以帮助任何处于同样情况的人。我们具体的问题是,在调试x64混合模式应用程序时,在调试输出窗口中获取来自OutputDebugString、MFC TRACE等的输出。

根据微软的说法,显然,为了调试x64混合模式应用程序,“auto”调试器类型(设置在“调试”->“调试器类型”属性页中)默认为托管而不是混合。这将需要明确设置为“Mixed”,才能在调试64位构建时看到托管和本机调试输出。


1
在我的情况下,我正在从IE扩展中调用输出调试字符串。一般来说,IE不允许这种通信。因此,我最终以管理员身份运行IE,并以管理员身份运行DebugView。 - vrrathod
在我的情况下,我调用的是OutputDebugStringW。将其更改为OutputDebugStringA可以正常工作。 - David Wohlferd

10

有许多原因可能会导致这个方法无法工作。我不小心禁用了它--以下是需要检查的所有事项,以使其正常运行:

  1. 是否将调试输出文本从“输出”窗格重定向到“立即”窗格,因此您看不到它?要关闭此功能:

    • 调试
    • 选项和设置
    • [ ] 将所有输出窗口文本重定向到“立即”窗口
  2. 是否显示“输出”窗格?

    • 调试
    • 窗口
    • 输出
  3. 在“输出”窗格中,你是否启用了“程序输出”?

    • 调试
    • 窗口
    • 输出
    • 在该窗格内任何位置右键单击
    • [x] 程序输出
  4. 你是否选择了正确的调试类型?

    • 在“解决方案资源管理器”(视图 > 解决方案资源管理器)窗格中
    • 右键单击你的项目
    • 属性
    • 调试
    • 调试类型: 从 自动 更改为 本机混合
  5. 程序是否在启动之前尝试连接调试器?要关闭附加功能:

    • 在“解决方案资源管理器”(视图 > 解决方案资源管理器)窗格中
    • 右键单击你的项目
    • 属性
    • 调试
    • 附加:更改为
  6. 您是否在使用OutputDebugStringW()?请尝试改用OutputDebugStringA()

  7. 最后,您是否以调试模式启动程序?:-) 嘿,你永远不知道!

    • 调试
    • 开始调试(F5)

我以前没有看到过全面的列表,因此上述所有内容都是我必须验证设置正确的事项。


1
非常感谢!我不确定是怎么回事,但我一定是无意中在输出窗格中取消了“程序输出”,并且一直在疯狂地尝试弄清楚为什么我再也看不到调试信息了。如果我能给你多个赞就好了 :-) - Brian Rothstein
我可以给你们两个人都点赞,所以我已经放弃了两个赞 :) 确实对我来说是一个漫长的搜索,再次感谢Michael。 - Evgeny Yashin

4

三个小建议:

  1. 确保您实际上正在捕获事件(顶部菜单 -> 捕获 -> 捕获Win32已标记)
  2. 如果您的程序在低完整性下运行(运行时是否会出现安全警告),则需要以低完整性运行Debug View。为此,您需要在运行之前更改dbgview.exe的完整性级别。
  3. 如果您正在使用Visual Studio并且正在调试器中运行(按下F5),则调试输出实际上是由Visual Studio捕获的(在输出窗口中)。尝试使用ctrl f5运行程序。

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