首页 > 其他分享 >我想使用一个宏来控制是否打印debug信息,debug函数的具体内容是往文件中打印函数名和时间和行数

我想使用一个宏来控制是否打印debug信息,debug函数的具体内容是往文件中打印函数名和时间和行数

时间:2024-06-06 19:45:15浏览次数:13  
标签:__ 文件 PRINT 打印函数 宏来 DEBUG 调试信息 debug

你可以定义一个宏,让它根据是否启用调试模式来控制是否打印调试信息,并且将调试信息输出到文件中。下面是一个示例代码,其中定义了一个名为 DEBUG_PRINT 的宏,它会在启用调试模式时打印函数名、时间、行数以及自定义的调试信息到文件中:

#include <iostream>
#include <fstream>
#include <ctime>

// 定义 DEBUG 宏以启用调试模式
#define DEBUG

// 定义 DEBUG_PRINT 宏
#ifdef DEBUG
#define DEBUG_PRINT(msg) \
    do { \
        std::ofstream debugFile("debug.log", std::ios_base::app); \
        debugFile << __func__ << "() at line " << __LINE__ << " [" << __TIMESTAMP__ << "]: " << msg << std::endl; \
        debugFile.close(); \
    } while (0)
#else
#define DEBUG_PRINT(msg)
#endif

// 示例函数
void myFunction() {
    // 调试信息输出到文件
    DEBUG_PRINT("This is a debug message from myFunction");
    
    // 其他函数逻辑...
}

int main() {
    // 调试信息输出到文件
    DEBUG_PRINT("Debug message from main function");

    // 调用示例函数
    myFunction();

    return 0;
}

在这个示例中,DEBUG_PRINT 宏用于打印调试信息。当定义了 DEBUG 宏时,该宏会将调试信息写入名为 "debug.log" 的文件中,包括函数名、时间戳、行数以及自定义的调试信息。当未定义 DEBUG 宏时,DEBUG_PRINT 宏不会执行任何操作。

在调用 DEBUG_PRINT 宏时,你可以传递任何你想要打印到文件的调试信息。在本例中,我使用了 __func____LINE____TIMESTAMP__ 预定义宏来获取函数名、行号和时间戳。这些预定义宏在大多数编译器中都是可用的,但请注意它们可能在一些编译器或环境中不被支持。

此外,我使用了 std::ofstream 来打开文件,并在写入完调试信息后关闭文件。这确保了在写入调试信息后文件被正确关闭,以防止资源泄漏。

标签:__,文件,PRINT,打印函数,宏来,DEBUG,调试信息,debug
From: https://www.cnblogs.com/donghao99/p/18235902

相关文章

  • QT笔记:重定向qDebug到控件
    QT笔记:重定向qDebug到控件作为log输出的qDebug可以将调试信息打印到调试终端中,但是有时候实际使用将其输出到UI界面也是很有用的,这里记录下如何将qDebug进行控件重定向。测试版本为QT6.6.2代码mainwindow.h//只要能正常编译过qDebug的就行#include<QMainWindow>QT_BEGIN_......
  • 巧用CMake编译策略:C++二次开发中的Release与Debug模式切换秘籍
    往期本博主的C++精讲优质博文可通过这篇导航进行查找:《Lemo的C++精华博文导航:进阶、精讲、设计模式文章全收录》前言在C++二次开发的过程中,理解各种编译模式并能灵活切换,对于提升软件性能和调试效率至关重要。本文将深入讨论Debug与Release模式的区别、默认编......
  • 游戏渲染调试工具 / 抓帧 / Frame Debugger
    有时候要调试一些游戏的渲染过程,可以用以下游戏:1.FrameDebugger如果是Unity项目,可以直接在编辑器的Window/Analysis/FrameDebugger打开自带的抓帧工具,对于自己的项目非常合适,能看到每一帧渲染的整个过程 2.RenderDoc如果要调试的游戏是手机游戏,或者PC上的其他游戏,......
  • Camx架构-Camera kernel Driver & debugging
    目录V4L2frameworkcameradriversCRM功能性CRMloganalysis使能CRMlog:camera启动期间列举子设备:userspace 连接或者取消已获得的devicehandles(UMD等效于CSLLink/CSLUnlink)userspaceopenrequest(UMD等效于CSLOpenRequest)在SOF期间,requestmanager的操作:如......
  • Advanced .Net Debugging 9:平台互用性
    一、介绍这是我的《Advanced.NetDebugging》这个系列的第九篇文章。这篇文章的内容是原书的第二部分的【调试实战】的第七章【互用性】。互用性包含两个方面,第一个方面就是托管代码调用COM,此情况叫做COM互用性(也叫做COMInterop);第二个方面就是托管代码调用从DLL中......
  • IDEA之如何Debug源码跟踪
    以Debug模式启动服务,左边的一个按钮则是以Run模式启动。在开发中,我一般会直接启动Debug模式,方便随时调试代码。断点:在左边行号栏单击左键,或者快捷键Ctrl+F8打上/取消断点,断点行的颜色可自己去设置。Debug窗口:访问请求到达第一个断点后,会自动激活Debug窗口。如果没有自动激活,可......
  • Debug-013-el-loading中显示倒计时时间
    前言:            今天实现一个小小的优化,业务上是后端需要从设备上拿数据,所以前端需要不断调用一个查询接口,直到后端数据获取完毕,前后端根据一个ending字段为true判断停止调用查询接口。由于这个查询时间比较久,所以需要一个laoding效果。优化:前端除了根据后......
  • Debug-012-el-popover 使用 doClose() 关闭窗口不生效的处理方案
     前言:    今天上午碰见一个非常奇怪的情况:一样的方法实现的功能,效果却不一样。两个页面都是使用的doClose()去关闭的el-popover,其中有一个就是不生效,找不同找了半天,始终不得其解。请看效果吧:el-popover-doClose()-ok视频1(el-popover-doClose()-关闭成功的)e......
  • Nginx R31 doc-17-debugging 调试
    前言大家好,我是老马。很高兴遇到你。我们为java开发者实现了java版本的nginxhttps://github.com/houbb/nginx4j如果你想知道servlet如何处理的,可以参考我的另一个项目:手写从零实现简易版tomcatminicat手写nginx系列如果你对nginx原理感兴趣,可以阅读:从零......
  • windows添加debug信息,并存储
    .h#ifndefFILE_UTIL_H#defineFILE_UTIL_H#include<string>voiddonghaodebug(conststd::string&content);#endif//FILE_UTIL_H.cpp#include"donghaodebug.h"#include<fstream>voiddonghaodebug(conststd::string&con......