C语言 OutputDebugString与格式化输出函数OutputDebugPrintf案例详解

 更新时间:2021年08月20日 14:37:32   作者:EmbededCoder  
这篇文章主要介绍了C语言 OutputDebugString与格式化输出函数OutputDebugPrintf案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

OutputDebugString属于windows API的,所以只要是包含了window.h这个头文件后就可以使用了。可以把调试信息输出到编译器的输出窗口,还可以用DbgView(本机或TCP远程)这样的工具查看,这样就可以脱离编译器了。  

OutputDebugString 默认只能输入一个参数,不能像printf那样格式化输出,下面改造成类似printf函数的输出方式。

#include <windows.h>
#include <stdio.h>
//#include <stdlib.h>
#include <stdarg.h>
 
#define IS_USE_OUTPUT_DEBUG_PRINT   1
 
#if  IS_USE_OUTPUT_DEBUG_PRINT 
 
#define  OUTPUT_DEBUG_PRINTF(str)  OutputDebugPrintf(str)
void OutputDebugPrintf(const char * strOutputString, ...)
{
#define PUT_PUT_DEBUG_BUF_LEN   1024
	char strBuffer[PUT_PUT_DEBUG_BUF_LEN] = { 0 };
	va_list vlArgs;
	va_start(vlArgs, strOutputString);
	_vsnprintf_s (strBuffer, sizeof(strBuffer) - 1, strOutputString, vlArgs);  //_vsnprintf_s  _vsnprintf
	//vsprintf(strBuffer,strOutputString,vlArgs);
	va_end(vlArgs);
	OutputDebugStringA(strBuffer);  //OutputDebugString    // OutputDebugStringW
 
}
#else 
#define  OUTPUT_DEBUG_PRINTF(str) 
#endif

 使用实例:

OutputDebugPrintf("DEBUG_INFO | %d %s",600019,"hello");

然后在 DbgView 设置一个过滤:DEBUG_INFO,抓取固定的输出。

Unicode模式下,OutputDebugString要求一个 wchar_t 而不是char,而sprintf则需要char参数,那我们是不是一定要通过字符转换解决问题呢?

答案就是 OutputDebugStringA()

原因:Unicode模式,OutputDebugString会变成OutputDebugStringW。如果想用ANSI版本的,直接写OutputDebugStringA,或者设置工程属性,使用MBCS的编码集。

处理“error C2220: warning treated as error - no object file generated”错误"

产生原因为:有些Project编译选项中,Treat Warnings As Errors(把警告看作错误来处理)选项开启了。

只要把此选项关闭,就可以正常编译了。

在Solution中,选择工程,右键菜单中选择“Properties”。弹出的属性框中,将Configuration选择“All Configurations”,选择“C/C++/General/”,右侧Treat Warnings As Errors值从原来的“Yes(/WX)”改为“No(/WX-)”。

点击确定,再重新编译,即可。

怎样处理“error C2220: warning trea...”错误

到此这篇关于C语言 OutputDebugString与格式化输出函数OutputDebugPrintf案例详解的文章就介绍到这了,更多相关C语言 OutputDebugString与格式化输出函数OutputDebugPrintf内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言 structural body结构体详解用法

    C语言 structural body结构体详解用法

    C 数组允许定义可存储相同类型数据项的变量,结构是 C 编程中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项,结构用于表示一条记录,假设您想要跟踪图书馆中书本的动态,您可能需要跟踪每本书的下列属性
    2021-10-10
  • C++异常捕捉与处理的深入讲解

    C++异常捕捉与处理的深入讲解

    这篇文章主要给你大家介绍了关于C++异常捕捉与处理的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • c语言swap(a,b)值交换的4种实现方法

    c语言swap(a,b)值交换的4种实现方法

    c语言swap(a,b)值交换的4种实现方法,这么好的东西,尽管简单,但值得发表,以此共享。
    2013-02-02
  • c++实现md5加密的代码

    c++实现md5加密的代码

    这篇文章主要介绍了c++实现md5加密的实例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • C++中的对象数组详细解析

    C++中的对象数组详细解析

    在建立数组时,同样要调用构造函数。如果有50个元素,就需要调用50次构造函数。在需要的时候,可以在定义数组时提供实参以实现初始化
    2013-10-10
  • QT中QByteArray与char、int、float之间的互相转化

    QT中QByteArray与char、int、float之间的互相转化

    本文主要介绍了QT中QByteArray与char、int、float之间的互相转化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • VC获取当前路径及程序名的实现代码

    VC获取当前路径及程序名的实现代码

    VC上或取当前路径有多种方法,最常用的是使用 GetCurrentDirectory和GetModuleFileName函数,个中都有诸多注意事项,特别总结一下
    2016-11-11
  • C++中智能指针unique_ptr的实现详解

    C++中智能指针unique_ptr的实现详解

    智能指针本质上并不神秘,其实就是 RAII 资源管理功能的自然展现而已,这篇文章主要为大家详细介绍了如何实现 C++中智能指针的 unique_ptr,需要的可以了解下
    2024-01-01
  • 详解Visual Studio 2019(VS2019) 基本操作

    详解Visual Studio 2019(VS2019) 基本操作

    这篇文章主要介绍了详解Visual Studio 2019(VS2019) 基本操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • C++结构体struct和类class区别详解

    C++结构体struct和类class区别详解

    struct和class有什么区别?最本质的一个区别就是默认的访问控制:默认的继承访问权限,struct是public的,class是private的。
    2017-11-11

最新评论