VC MFC 调试信息 DebugView

11

一、如何使用DebugView.exe 打印调试信息:

  1. 捕捉Release模式的Win32程序输出的调试信息,请选中“Capture Global Win32”选项

  2. 只有调用了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 为空,将可以抓不到任何数据

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值