11
一、如何使用DebugView.exe 打印调试信息:
-
捕捉Release模式的Win32程序输出的调试信息,请选中“Capture Global Win32”选项
-
只有调用了WinDebug中的方法输出的Debug打印信息才能被Debugview捕获。
debugview 可以捕获程序中由TRACE(debug版本)和OutputDebugString输出的信息。支持Debug、Release模式编译的程序(即该软件捕获的是exe直接运行时,抛出的信息,而不是Visual Studio调试时的),甚至支持内核程序,而且能够定制各种过滤条件。
22
更多功能,请参考《Windows Sysinternals 实战指南》。
如果应用程序正在被调试,那么DebugView捕获不到该程序的调试信息,请到调试器的输出窗口查看。具体原理可以参考张银奎老师的《软件调试》。
在win10系统中,无法捕获驱动程序输出的调试信息。
首先,捕获驱动程序的调试信息,需要管理员权限
使用Process monitor查看DebugView的文件读写记录,印证了我们的猜测。
22
使用OutputDebugString()可以方便的输出调试信息。如果你还没在你的程序里加上调试信息的话,快快加上吧。注意不要把敏感信息输出来,别人用工具可以方便的查看到。切记!
DebugView是调试的好帮手。过滤和高亮功能可以让我们更加有效的查看我们关心的调试信息。
《软件调试》详细讲述了OutputDebugString()的实现原理,感兴趣的小伙伴儿一定要看啊!
《Windows Sysinternals 实战指南》
《软件调试》
OSR: Getting DbgPrint Output To Appear In Vista and Later[1]
dbgview 在 windows 10 中关闭后再次打开时无法 “capture kernel”[2]
关于OutputDebugString()的实现原理,可以参考 张银奎老师的 《软件调试》(第一版)第10章 10.7节 输出调试字符串。《软件调试》这本调试领域的扛鼎之作不用我多做介绍吧?买就对了!不过第一版已经绝版了,好消息是:《软件调试》(第二版)卷 1:硬件基础 已经出版了。而且听张老师说,年底的时候, 《软件调试》(第二版)卷 2 有望出版(不过看这意思,2019年应该没戏了,希望2020年上半年能等到),对调试感兴趣的朋友有福了,多多关注下吧。
对了,张老师也有公众号的,大家可以搜索格友关注。
方便的格式化OutputDebugString输出函数
OutputDebugString 使用只能输入一个参数,在实际使用中带来很大的不便,下面改造后的函数就很好了,想怎么输出自己定。
void OutputDebugPrintf(const char * strOutputString,…)
{
char strBuffer[4096]={0};
va_list vlArgs;
va_start(vlArgs,strOutputString);
_vsnprintf(strBuffer,sizeof(strBuffer)-1,strOutputString,vlArgs);
//vsprintf(strBuffer,strOutputString,vlArgs);
va_end(vlArgs);
OutputDebugString(strBuffer);
}
使用实例:
OutputDebugPrintf(“DEBUG_INFO | %d %s”,600019,“tangxg”);
然后在 DbgView 设置一个过滤:DEBUG_INFO,只抓自己的输出,用起来方便多了
(更新)OutputDebugString函数简单封装,实现格式化打印输出(VC++)
https://blog.csdn.net/sunflover454/article/details/48718409
https://docs.microsoft.com/en-us/sysinternals/downloads/debugview
解决VS2017中DebugView不显示输出win32的日志的问题
DebugView是什么
先奉上MSDN的官方介绍链接。
这个小工具可以监视本地系统或通过TCP/IP访问的任何计算机上的的调试输出。听老师讲,这个工具一般用于开发驱动程序;在用于开发驱动程序时,需要勾选菜单栏中Capture->Capture Kernel。
我用DebugView干什么
在Windows程序中,用于监视OutputDebugString的调试输出。
使用DebugView时输出窗口不显示输出问题的解决
经过了一番百度和自己的尝试,发现(至少是在我的程序中)要让DebugView显示输出,需要具备:
DebugView要在运行Windows程序之前用管理员模式打开;
运行自己的Windows程序时要注意使用**Ctrl+f5(也就是开始执行(不调试))**而不是直接使用f5(开始调试)。
设置好这两点,DebugView就可以显示输出了~
1
过滤器的功能比较实用:include 表示调试信息包含的字符串,exclue 表示不包含的字符串,多个字符串使用“;”号隔开
默认情况
注意 里面的 * 号,如果include 为空,将可以抓不到任何数据