OutputDebugString 加强版(Debug)
2013-01-24 09:02
465 查看
当一个大型程序中存在着一个非常隐蔽的错误(所谓隐蔽,指的是我从运行过程中发现程序不正常,但是即使检查源代码,也很难发现何处存在错误),于是乎,我们在运行过程中添加一些输出语句,把中间结果或者程序状态输出出来,根据大量的结果来推测程序究竟出错在何处。这种情况是绝非程序断点能够搞定的,因为有时候你断无可断(特别是对于DLL程序的调试)。由于我们输出的debug信息只能由Dbmon.exe(或Dbgview.exe)来显示。所以,即使程序发布之后,也无须去掉这些调试点,这样对以后排错也很有利。
OutputDebugString 是微软提供给我们用于输出调试信息的API函数,但是它只能直接输出的是字符串,而像GetLastError()返回数字型的的信息,需要经过类型转换(使用itoa将整型转换为字符数组)才能输出,比较麻烦。我们需要一种类似于printf函数的信息输出函数,它可以支持输出任何类型,任何个数的数据,例如:
printf("地址: %p,字符串: %s,错误号:%d\n ",p1,szStr,GetLastError());[/b]
下面的一个自定义的调试信息输出函数(MyDebug),它实现了我们期望的功能,经过我在项目中的实际使用,发现效果很不错。
#include <stdarg.h>
#include <stdio.h>
#include <windows.h>
void MyDebug(const char * sz, ...)
{
char szData[512]={0};
va_list args;
va_start(args, sz);
_vsnprintf(szData, sizeof(szData) - 1, sz, args);
va_end(args);
OutputDebugString(szData);
}
使用起来很简单,和printf函数调用格式基本一样,例如:
MyDebug("地址: %p,字符串: %s,错误号:%d\n ",p1,szStr,GetLastError());[/b]
OutputDebugString 是微软提供给我们用于输出调试信息的API函数,但是它只能直接输出的是字符串,而像GetLastError()返回数字型的的信息,需要经过类型转换(使用itoa将整型转换为字符数组)才能输出,比较麻烦。我们需要一种类似于printf函数的信息输出函数,它可以支持输出任何类型,任何个数的数据,例如:
printf("地址: %p,字符串: %s,错误号:%d\n ",p1,szStr,GetLastError());[/b]
下面的一个自定义的调试信息输出函数(MyDebug),它实现了我们期望的功能,经过我在项目中的实际使用,发现效果很不错。
#include <stdarg.h>
#include <stdio.h>
#include <windows.h>
void MyDebug(const char * sz, ...)
{
char szData[512]={0};
va_list args;
va_start(args, sz);
_vsnprintf(szData, sizeof(szData) - 1, sz, args);
va_end(args);
OutputDebugString(szData);
}
使用起来很简单,和printf函数调用格式基本一样,例如:
MyDebug("地址: %p,字符串: %s,错误号:%d\n ",p1,szStr,GetLastError());[/b]
相关文章推荐
- OutputDebugString
- 调试输出信息OutPutDebugString
- OutputDebugString
- delphi 中OutputDebugString 函数的妙用(转载)
- 使用OutputDebugString将调试信息输出
- win32程序调试OutputDebugString 类似printf格式化输出
- OutputDebugString实现变参输入
- Windows下调试信息 TRACE OutputDebugString
- 使用OutputDebugString帮助调试
- VirtualProtect遇上OutputDebugString
- DbgView 显示OutputDebugString输出内容 不能显示问题总结
- 转载: 译:理解 Win32 "OutputDebugString"
- Microsoft Visual Studio 中printf的替代函数OutputDebugString
- 在程序中访问OutputDebugString的信息
- OutputDebugString的用法
- 使用OutputDebugString做调试输出
- 捕获OutputDebugString
- 使用vs2008 的OutputDebugString 时编译产生的错误
- DbgView不能显示OutputDebugString的输出内容
- 调试输出信息OutPutDebugString