NanoLog起步笔记-6-StaticLogInfo

nonolog起步笔记-6-StaticLogInfo

  • StaticLogInfo
  • 文件名和行号
    • 文件名和行号的传入
    • log参数
  • RuntimeLogger::registerInvocationSite
    • logid为什么只能被赋一次值
  • reserveAlloc
  • 加入消息头
  • finishAlloc
  • 返回

StaticLogInfo

写C语言编译前端时,给我印象深刻的一部分是,我们需要记录,当前的位置,以便于在出错时,报告出错的位置。
NanoLogInternal::log函数中,注册的部分,一部分功能,也是这样的。
这个方面,还是我比较看重的,前面我提到,现在存在的一个bug与之相关,如果在解压某条出错时,打印文件名和行号,这问题,也就不是一个问题了。

文件名和行号

文件名和行号的传入

如下:

#define NANO_LOG(severity, format, ...) do { \...\NanoLogInternal::log(logId, __FILE__, __LINE__, NanoLog::severity, format, \numNibbles, paramTypes, ##__VA_ARGS__); \
} while(0)

log参数

template<long unsigned int N, int M, typename... Ts>
inline void
log(int &logId,const char *filename,const int linenum,
...

在这里插入图片描述## 调试时的效果
选择一个用户面请求
在这里插入图片描述
代码是这样:

    // All the standard printf specifiers (except %n) can be usedchar randomString[] = "Hello World";NANO_LOG(NOTICE, "A string, pointer, number, and float: '%s', %p, %d, %f",randomString,&randomString,512,3.14159);

在这里插入图片描述
如上图,能够看到文件名与行号,与调用方对应。
这时logI=-1,还没有被赋值。

RuntimeLogger::registerInvocationSite

##logid赋值和入队

            logId = static_cast<int32_t>(invocationSites.size());invocationSites.push_back(info);

在这里插入图片描述

        // Maps unique identifiers to log invocation sites encountered thus far// by the non-preprocessor version of NanoLogstd::vector<StaticLogInfo> invocationSites;

logid为什么只能被赋一次值

    if (logId == UNASSIGNED_LOGID) {const ParamType *array = paramTypes.data();StaticLogInfo info(&compress<Ts...>,filename,linenum,severity,format,sizeof...(Ts),numNibbles,array);RuntimeLogger::registerInvocationSite(info, logId);}

如上,这代表着,在同一处代码中的logID不会被重新赋值。

reserveAlloc

这里暂略,如下图,因为分配的大小很小,所以,直接返回了。
没有锁。
这是因为每块内存,都是线程专有的。不需要锁。
在这里插入图片描述

加入消息头

如下图,消息头(似乎尾),描述了logid,根据这个id,也就能对应上这段binary内存的meta定义了(前面registerInvocationSite,注册的)。
在这里插入图片描述

finishAlloc

刷新内存,收尾。确保cache内容刷入内存。
NanoLogInternal::RuntimeLogger::finishAlloc(allocSize);

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

返回

在这里插入图片描述# 这两个没有命中bread point,是因为级别过低
这里不要吃惊,只是简单地因为:
NanoLog::setLogLevel(NOTICE);
而这里是DEBUG.
在这里插入图片描述

namespace LogLevels {/*** The levels of verbosity for messages logged with #NANO_LOG.*/enum LogLevel {// Keep this in sync with logLevelNames defined inside Log.cc.SILENT_LOG_LEVEL = 0,/*** Bad stuff that shouldn't happen. The system broke its contract to* users in some way or some major assumption was violated.*/ERROR,/*** Messages at the WARNING level indicate that, although something went* wrong or something unexpected happened, it was transient and* recoverable.*/WARNING,/*** Somewhere in between WARNING and DEBUG...*/NOTICE,/*** Messages at the DEBUG level don't necessarily indicate that anything* went wrong, but they could be useful in diagnosing problems.*/DEBUG,NUM_LOG_LEVELS // must be the last element in the enum};
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/487184.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不是“我应该做什么”,而是“我想做什么”

1. 识别内心的渴望 首先&#xff0c;我们需要识别自己真正的愿望和激情所在。这可能需要一些时间和自我反思。问自己&#xff1a;在没有任何外界压力的情况下&#xff0c;我真正想做的是什么&#xff1f;是赚钱、生活、旅行、追星&#xff0c;还是其他什么&#xff1f;识别这些…

Java-JMX (官方文档解读)

JMX 简介 JMX&#xff08;Java Management Extensions&#xff09;是Java平台的一个标准管理框架&#xff0c;自Java 1.5版本起成为Java 平台标准版 (Java SE 平台) 的标准组成部分。JMX 技术提供了一种简单、标准的方法来管理资源&#xff08;例如应用程序、设备和服务&#x…

商品期权开户条件是什么?

商品期权开户条件是什么&#xff1f; 商品期权是一种金融衍生品&#xff0c;它赋予期权持有者在特定日期&#xff08;欧式期权&#xff09;或在特定日期之前&#xff08;美式期权&#xff09;&#xff0c;以特定价格&#xff08;行权价格&#xff09;买入或卖出一定数量的某种…

RISC-V IO 虚拟化架构在 X100 芯片上的实现

安全之安全(security)博客目录导读 本篇博客,我们聚焦RISC-V 2024中国峰会上RISC-V虚拟化相关专题中的IOMMU虚拟化在X100芯片上的实现,来自进迭时空郑律老师。 我们先来看下X100的RISC-V芯片和已有的关于处理器内核虚拟化和内存虚拟化相关的支持 关于IOMMU的特性支持,下图红…

Windows 系统没有网络链接常见原因以及解决方案

在使用 Windows 电脑时&#xff0c;有时会遇到电脑显示已连接网络&#xff0c;但却无法访问 Internet 的情况&#xff0c;这可能是由多种原因导致的。以下简鹿办公将详细介绍一些常见原因及对应的解决方案。 一、网络连接问题 原因 路由器故障&#xff1a;路由器长时间运行可…

【Rive】事件回调

1 前言 Android 中可以通过 RiveAnimationView 的 addEventListener 方法添加动画监听器&#xff0c;用于监听状态动画和过渡动画的开始和结束时机&#xff0c;实现动画开始和结束时的事件回调&#xff1b;也可以监听 Rive 事件触发的时机&#xff0c;在事件触发时响应回调。 …

Springboot3整合Redis

书接上篇《Redis 安装篇&#xff08;阿里云服务器&#xff09;_阿里云安装redis-CSDN博客》&#xff0c;安装好Redis后&#xff0c;就需要在springboot项目中使用Redis了。 一、SpringBoot整合Redis 1.添加坐标 <!--redis--> <dependency><groupId>org.sp…

REDMI瞄准游戏赛道,推出小屏平板

近日&#xff0c;REDMI推出了一款8.8英寸的小屏平板&#xff0c;引发市场关注。该平板采用LCD屏幕&#xff0c;搭载天玑9400处理器&#xff0c;定位游戏市场&#xff0c;意在开拓小屏平板的新领域‌。 ‌小屏平板新尝试‌ 这款REDMI平板未追随大屏潮流&#xff0c;而是选择了8…

在Ubuntu上使用docker compose安装N卡GPU的Ollama服务

在现代计算环境中,利用 GPU 进行计算加速变得越来越重要。下面将讲解如何在Ubuntu上使用docker compose安装N卡GPU的Ollama服务。 1、安装 NVIDIA 容器工具 首先,需要确保你的系统已经安装了 NVIDIA 容器工具 nvidia-container-toolkit。这是让 Docker 容器访问 GPU 的关键…

OllyDbg、CE简单介绍

基础知识&#xff1a; 想要破解软件&#xff0c;需要一些基础知识&#xff1a; 文件格式&#xff1a;Windows对应PE、Linux对应ELF、IOS对应Mash-0。文件格式是指操作系统规定的每个段&#xff08;代码段、数据段、堆、栈&#xff09;的大小、顺序等信息。 汇编语言&#xff1…

泷羽sec学习打卡-brupsuite4

声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都 与本人无关,切莫逾越法律红线,否则后果自负 关于brupsuite的那些事儿-proxy proxyInterceptHTTP history/WebSocket history&#xff08;历史记录&a…

Wallpaper壁纸制作学习记录10

图像准备 外部图像编辑器快速访问 Wallpaper Engine 允许您配置自己喜欢的外部图像编辑器&#xff0c;以用作补充图像编辑工具&#xff0c;您可以在整个编辑器中快速访问该工具。 您可以在Wallpaper Engine 编辑器中配置您选择的图像编辑器&#xff0c;通过顶部的文件菜单&am…

【C++算法】36.位运算_只出现一次的数字 II

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;解析 题目链接&#xff1a; 137. 只出现一次的数字 II 题目描述&#xff1a; 解法 你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。说明时间复杂度O(n)&#xff0c;空间复杂…

transformer学习笔记-自注意力机制(1)

自注意力机制&#xff0c;可以说是transformer中最核心的部分之一&#xff0c;注意力机制&#xff0c;主要是在处理序列数据时&#xff0c;根据序列数据提供的上下文环境信息识别需要关注的特征数据&#xff0c;注意力机制通常用于不同序列之间的交互&#xff0c;表示不同序列环…

日志基础示例python和c++

文章目录 0. 引言1. python2. c 0. 引言 本文主要记录python版本和c版本常用的日志基础示例。 1. python python版本常用的是logging库&#xff0c;结合colorlog库&#xff0c;可根据不同日志级别打印不同颜色的日志&#xff0c;为了便于分析问题&#xff0c;还添加了日志保…

TimeXplusplus——提高时间序列数据的可解释性,避免琐解和分布偏移问题的深度学习可解释性的框架

摘要 论文地址&#xff1a;https://arxiv.org/abs/2405.09308 源码地址&#xff1a;https://github.com/zichuan-liu/timexplusplus 信号传输技术的优化对于推动光通信的发展至关重要。本文将详细探讨线路编码技术的目标及其实现方式。线路编码旨在提高带宽和功率效率&#xf…

python爬虫--某房源网站验证码破解

文章目录 使用模块爬取目标验证码技术细节实现成果代码实现使用模块 requests请求模块 lxml数据解析模块 ddddocr光学识别 爬取目标 网站验证码破解思路是统一的,本文以城市列表为例 目标获取城市名以及城市连接,之后获取城市房源信息技术直接替换地址即可 验证码 技术…

TimesFM模型论文内容

全文总结 这篇论文提出了一种基于解码器架构的时间序列预测基础模型TimesFM&#xff0c;旨在通过零样本学习在多种公共数据集上实现接近于监督学习模型的预测精度。 研究背景 研究问题&#xff1a;这篇文章要解决的问题是如何设计一个时间序列基础模型&#xff0c;使其在零样…

文生图模型开源之光!ComfyUI - AuraFlow本地部署教程

一、模型介绍 AuraFlow 是唯一一个真正开源的文生图模型&#xff0c;由Fal团队开源&#xff0c;其代码和权重都放在了 FOSS 许可证下。基于 6.8B 参数优化模型架构&#xff0c;采用最大更新参数化技术&#xff0c;还重新标注数据集提升指令遵循质量。在物体空间和色彩上有优势…

【高中生讲机器学习】28. 集成学习之 Bagging 随机森林!

创建时间&#xff1a;2024-12-09 首发时间&#xff1a;2024-12-09 最后编辑时间&#xff1a;2024-12-09 作者&#xff1a;Geeker_LStar 嘿嘿&#xff0c;你好呀&#xff01;我又来啦~~ 前面我们讲完了集成学习之 Boooooosting&#xff0c;这篇我们来看看集成学习的另一个分支…