问题标签 [outputdebugstring]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2758 浏览

multithreading - 在 Delphi 中,OutputDebugString 线程安全吗?

线程安全吗?

我/我们一直在线程中使用它进行调试,我从来没有想过我应该以不同的方式来做。

(德尔福 7)

0 投票
0 回答
466 浏览

debugging - Windows Mobile 6.0 上的 BugTrap 和 RapiDbg

我正在尝试将驱动程序和一些应用程序从运行 PocketPC 2003 (Windows CE 4.21) 的 PDA 移植到运行 Windows Mobile 6 (CE 5.2) 的PDA。

有谁知道我是否/如何记录驱动程序发出的 OutputDebugString 调用,而不是使用 Platform Builder 或任何自定义操作系统映像?

移植已完成 99%,但我需要对驱动程序级别发生的事情进行故障排除和调试。

到目前为止,BugTrap (columbo) 和 RapiDbg 的组合使我能够在不需要 Platform Builder 的情况下调试驱动程序。我能够捕获我所有的OutputDebugString,通过我的开发机器上的 activesync 提取它们并从那里工作。

显然bugtrap.exe不能在 WM6 上运行(它崩溃),我找不到任何新版本。

有没有办法在不需要平台生成器或操作系统调试映像的情况下捕获(转储到文件,通过 USB 发送到主机,......无论如何)OutputDebugString 调用?

我尝试使用 tracetool 框架(参见 sourceforge),将 ODS 调用(幸运的是,我所有的调试语句都使用宏)替换为它Trace::Debug()->Send,并且虽然常规 DLL 和应用程序按预期工作,但驱动程序却没有。

0 投票
4 回答
2562 浏览

c++ - OutputDebugString + DebugView = 不是标签!

我正在使用 OutputDebugString 转储 \t 分隔数据,然后使用 ex-Sysinternals DebugView 来捕获它。

问题是 DebugView 中的所有数据似乎都是用空格分隔的,因此我需要先执行 CTRL+H "\x20" "t" 来用制表符替换空格,然后才能使用它(我真的需要制表符分隔的数据)。

有没有办法告诉 DebugView 不要用空格替换制表符?或者也许有更好的工具可用于捕获 OutputDebugString 函数的输出?

任何想法都非常受欢迎!

0 投票
2 回答
582 浏览

c++ - 调用 std::cout.rdbuf() 会产生语法错误

也许我错过了一些东西,但我不明白为什么 Visual Studio 2008 没有看到 rdbuf() 过程。这是我的代码:

BufferedStringBuf 类来自这个页面:http ://www.devmaster.net/forums/showthread.php?t=7037

这会产生以下错误:

...src\main.cpp(19) : error C2143: syntax error : missing ';' before '.'

我要做的就是使用 OutputDebugString() 将 std::cout 重定向到 Visual Studio 输出窗口。

0 投票
4 回答
30914 浏览

c# - 可以在 Visual Studio 的输出窗口中查看 OutputDebugString 的输出吗?

我正在使用 C# 和 Visual Studio 2010。

当我使用OutputDebugString编写调试信息时,它是否应该显示在输出窗口中?

我可以OutputDebugStringDebugView中看到输出,但我想我会在 Visual Studio 的输出窗口中看到它。我在菜单工具下查看过?选项调试General,并且输出不会被重定向到立即窗口。我还查看了菜单 Tools* ?选项调试输出窗口和所有常规输出设置都设置为“开”。最后,我使用了输出窗口中的下拉列表来指定应该出现调试消息。

如果我更改菜单工具*?选项调试一般将输出重定向到即时窗口,OutputDebugString消息不会出现在即时窗口中。

这是我的整个测试程序:

如果我在调试器中运行,Debug.WriteLine输出会显示在输出窗口中,但OutputDebugString输出不会。

如果我从控制台窗口运行,两者都Debug.WriteLine显示OutputDebugString在 DebugView 中。

为什么OutputDebugString输出永远不会出现在输出窗口中?

最终,我的意图不是用 编写大量调试输出OutputDebugString,而是使用 System.Diagnostics 或 NLog 或类似的东西。我只是想知道,如果我将日志平台配置为写入OutputDebugString,输出是否可以从调试器中看到。

我回到了我的原始程序(不是上面的简单测试),它通过文件使用TraceSourcesTraceListeners配置。app.config如果我将跟踪源配置为写入System.Diagnostics.DefaultTraceListener(记录为写入OutputDebugString),那么跟踪源输出将进入调试窗口。但是,直接使用OutputDebugString(例如在我的简单示例中)写入的行不会进入调试窗口。此外,如果我使用不同TraceListener的写入方式OutputDebugString(我从 Codeplex 的 Ukadc.Diagnostics 获得了一个),则该输出不会进入调试窗口。

关于 Ukadc.Diagnostics 跟踪侦听器的注意事项... Ukadc.Diagnostics 包含一些跟踪侦听器,允许自定义输出格式(类似于 log4net、NLog 和 LAB 中可用的格式)。因此,“仅”依赖于 Ukadc.Diagnostics 可以使用“标准”.NET 诊断日志记录,但我可以获得一些高级功能(如输出格式),而无需依赖可能更大的平台。在这种情况下,我可以使用 Ukadc.DiagnosticsOutputDebugStringTraceListener以与写入文件时相同的格式(如果需要,或不同的格式)将日志输出写入调试窗口。

请注意,我已经看到了这些问题,但它们没有提供有效的解决方案:

这里这里

0 投票
5 回答
1830 浏览

delphi - 在 Delphi 7 中绕过 OutputDebugString?

我想知道是否可以绕过OutputDebugString?我希望 OutputDebugString 输出显示在 DebugView 中,而不是在内部 Delphi 事件查看器窗口中。但我找不到告诉 Delphi 不要吞下 OutputDebugString 的方法。有任何想法吗?

问候

0 投票
2 回答
3697 浏览

delphi - 在 Delphi 中调试 OutputDebugString 调用

我的应用程序中有一些“流氓”OutputDebugString 调用会打印出“T”,但我不能只找到它。

是否有可能以某种方式在 OutputDebugString -function 上设置断点并查看它是从哪里调用的?

我正在使用德尔福 2009。

0 投票
1 回答
2275 浏览

c# - 问题通过 Win32 API 捕获全局(会话 0)OutputDebugString 消息?

我目前正在开发一个简单的应用程序来捕获 OutputDebugString 消息(类似于Windows Sysinternals DbgViewDBMon.NET)。从本地会话(即 Local\DBWIN_BUFFER_READY、Local\DBWIN_DATA_READY 和 Local\DBWIN_BUFFER)访问 OutputDebugString 消息时,一切都按预期工作。

但是,当我尝试访问会话 0 的任何输出(即 Global\DBWIN_BUFFER_READY 等)时,我没有收到任何输出。基于 DbgView 的行为,我假设应用程序必须以某种级别的管理权限运行。我在想我错误地配置了 SecurityDescriptor,或者我完全丢失了一些东西来访问 Global OutputDebugString 消息(读作......我现在对此事有些迷茫)。

我在下面突出显示了代码片段,但可以在CodePlex上找到完整的源代码

任何有关此事的帮助或见解将不胜感激。提前致谢!

安全描述符配置

我尝试了几种不同的配置,但提交的代码目前如下所示。

如您所料,此代码最终在我的 DbWinMessageSource 类的设置中被调用...

安全属性和事件

目前在 CodePlex 上提交的代码使用 Local\** 前缀,但据我所知,唯一的区别应该是 Local\** 替换为 Global\** ?然而,这似乎并没有按预期捕获输出。同样,相关的代码片段......

同样,最终在 DbWinMessageSource 的设置中调用如下:

我正在使用配置了 OutputDebugString 附加程序的 Log4Net 使用简单的 Web 应用程序进行测试。当我通过 Visual Studio 运行应用程序时,我会按预期捕获所有本地输出。当我将应用程序移入 IIS 并配置代码以捕获全局会话中的任何内容时;我什么都得不到。我已经确认 DbgView 正在捕获 IIS 的输出,正如我所期望的那样(所以这绝对是我做错的事情)。

希望这是足够的上下文,但如果需要更多信息或细节;让我知道。

注意:在 Windows 7 Professional 上进行开发,如果这有影响的话。

编辑

正如 Tyranid(和 Luke)所指出的,所需要的只是管理员权限和 SE_CREATE_GLOBAL_NAME。我又进行了一些测试,上面的代码设置实际上是在捕获一些全局消息(例如,在 IISRESET 期间);但是,当应用程序在 IIS 内部运行时(在 VS 会话期间通过 Local\** 路由),上面的代码不会从 Log4Net OutputDebugString 附加程序捕获任何数据。所有 Win32 api 调用都成功返回,调用时也没有返回任何错误。Marshal.GetLastWin32Error().为了更好地衡量,我添加了一些代码以确保当前 Windows 令牌具有 SE_CREATE_GLOBAL_NAME。粗略的代码如下所示:

对此的任何进一步见解将不胜感激。

0 投票
1 回答
3650 浏览

c# - 如何从服务接收 OutputDebugString?

我正在尝试使用以下代码捕获所有OutputDebugString消息(包括来自服务的消息)。在我迁移到 Windows 7 之前它运行良好。

问题在于,由于 Windows Vista 服务在低级别会话 #0 中运行,因此有些人说不可能捕获它们,而有些人则认为它是。你怎么看?

是否可以通过增加一些权限来修改以下代码,以便能够从 Session #0接收OutputDebugString消息?换句话说; 是否可以在会话 #0 中与会话 #1 共享 DBWIN_BUFFER?

我会说这应该是可能的,因为例如 DebugView 可以做到这一点,而且我看不到任何服务助手可以将这些消息(例如通过命名管道)从会话 #0 发送到 GUI 运行的会话 #1。

问题将是安全设置中的 IMO。谁能建议我如何修改它们?

即使代码在 Delphi 中,我也添加了 C# 标记,因为安全属性对于整个 Windows API 是通用的,并且 C# 有很多追随者 :)

0 投票
1 回答
709 浏览

visual-studio - 如何过滤 Visual Studio 2008 输出窗口

我正在寻找一种方法来将来自 OutputDebugString 的消息过滤到 VS 2008 的输出窗口中。我正在修改一个大型系统,我只对日志中的消息感兴趣。

我不介意输出在 VS 外部,事实上我更喜欢它。使用 SysInternals.DebugView 我可以轻松过滤消息,但是当在 VS 2008 中调试应用程序时,它的输出永远不会到达 DebugView。