DebugView输出调试信息

本文介绍了如何使用DebugView工具捕获并查看Windows程序中的调试信息。通过设置过滤器,可以方便地筛选出特定应用程序的输出。此外,还提供了一个实用的debugPrint宏定义示例,用于在程序中输出调试信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在写windows程序时,需要输出一些调试信息,这里介绍一种极其方便的方法。即使用OutputDebugString 在Debug模式下输出调试信息,在Release模式下不输出。

我们可以在VS的集成平台上输出调试信息,也可以使用DebugView来查看调试信息。

1.)DebugView图文教程

1、DbgView界面和监控方法

打开软件后,顶部工具栏中选择监控主机。先看连接本地机调试,点击“Connect Local”即可。

在这个工具栏上,主要看几个图标

此按钮,表示是否开启捕获服务

此按钮,表示是否捕获系统内核的Debug信息

此按钮,表示是否捕获一般Win32应用,也就相当于我们的应用的Debug信息

 

注意:只有调用了WinDebug中方法的地方的输出Debug信息才能被DebugView捕获。

 

再来看看捕获的应用信息:将打开两个按钮的叉叉去掉,就会看到DebugView可能输出一些信息。如下图: 

 这些都是系统中的应用调用WinAPI所输出的Debug信息。但是只有红色部分是我们的Demo所输出的信息。

此时我们可以新建过滤器,只查看我们自己想看到的信息打开后我们看到下图

 

在Include和Exclude,分别表示Debug Print的内容“包含”“不包含”的字符串。

例如在include中输入:GTA

 

点击OK后

 

DebugView就会只显示GTA开头的Debug信息,因此在写程序时,为了监控方便,我们可以将Debug信息分类,以不同的前缀或标志为约束,统一Debug输出格式,方便以后排除和捕获系统异常等情况。

Exclude与之相反,这里不介绍了。

另外说说,这个按钮表面显示的记录条数。

  

2、远程捕获

可以在本机调试捕获服务器上的Debug信息。

在服务器上新建dbgView.exe程序的快捷方式

 

在快捷方式的“目标“后键入:空格+/c字符。然后确定。

再运行快捷方式,服务器就会等待连接。

此时客户端打开自己的dbgview.exe

 

点击connect后,输入服务器的IP地址,便连上服务器了。这样,用户可以在本地直接捕获服务器上的Debug信息了。

主要功能就是这些。另外,如果要在运行时应用不输出debug信息,可以将web.config或app.config中的

<system.web>

                   <compilation debug="true" targetFramework="4.0"/>

设置为false,然后在调用WinDebug的地方就不会再输出Debug信息了

2.) 在程序中输出调试信息


参考:

  •  http://www.cnblogs.com/mushan/p/3351321.html

  •  http://www.cnblogs.com/ziwuge/archive/2011/10/31/2230326.html
  • http://blog.youkuaiyun.com/tanaya/article/details/5774671

要注意OutputDebugString 的格式,注意ASCII和Unicode不一样。

WINBASEAPI
VOID
WINAPI
OutputDebugStringA(
__in_opt LPCSTR lpOutputString
);
WINBASEAPI
VOID
WINAPI
OutputDebugStringW(
__in_opt LPCWSTR lpOutputString
);
#ifdef UNICODE
#define OutputDebugString OutputDebugStringW
#else
#define OutputDebugString OutputDebugStringA
#endif // !UNICODE

以下是我截取上面博客中的程序,可以直接使用。
debugPrint.h
//木杉的博客 http://www.cnblogs.com/mushan    
//2012年6月10日    


#ifndef _DEBUGPRINTF_H_    
#define _DEBUGPRINTF_H_    


#include<Windows.h>    
#include <tchar.h>    


//用于输出信息到编译器输出窗口的宏定义    
//使用win API,DEBUG版本会执行,RELEASE版本则不会    
//还可以使用DebugView,WinDbg等工具查看输出    


#ifdef _DEBUG    


#define DP0(fmt) {TCHAR sOut[256];_stprintf_s(sOut,_T(fmt));OutputDebugString(sOut);}    
#define DP1(fmt,var) {TCHAR sOut[256];_stprintf_s(sOut,_T(fmt),var);OutputDebugString(sOut);}    
#define DP2(fmt,var1,var2) {TCHAR sOut[256];_stprintf_s(sOut,_T(fmt),var1,var2);OutputDebugString(sOut);}    
#define DP3(fmt,var1,var2,var3) {TCHAR sOut[256];_stprintf_s(sOut,_T(fmt),var1,var2,var3);OutputDebugString(sOut);}    
//格式化输出调试信息
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);
	//ASCII
	OutputDebugStringA(strBuffer);
}




#endif    


#ifndef _DEBUG    


#define DP0(fmt) ;    
#define DP1(fmt, var) ;    
#define DP2(fmt,var1,var2) ;    
#define DP3(fmt,var1,var2,var3) ;    
void OutputDebugPrintf(const char * strOutputString,...){}


#endif    




#endif
main.cpp
	//木杉的博客  http://www.cnblogs.com/mushan  
	//2012年6月10日    
#include<stdio.h>   
#include"debugPrint.h"   




void main()   
{   
	OutputDebugPrintf("DEBUG_INFO | %d %s",600019,"北雁\n");
	for(int i=0;i<10;i++)   
	{   
		printf("hello!\n");   
		DP0("这是调试信息!\n");   
		DP1("这是调试信息%d\n",i);   
		DP2("这是调试信息%d--%d\n",i,i+1);   
		DP3("这是调试信息%d--%d--%d\n",i,i+1,i+2);   
	}   
	getc(stdin); 
	
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值