3. C++调试时显示代码所在文件 / 函数 / 行号信息

news2024/11/24 1:20:47

1. 说明

在执行C++代码时,有时希望知道当前代码所在的文件名、函数名和对应行号位置信息,方便快速定位到代码所在处。想要获取这些信息,可以使用C++提供的一些宏进行获取。

2. 简单说明

__FILE__ : 用于获取当前语句所在源文件的文件名
——func__ : 用于获取当前语句所在的函数名
__LINE__ : 用于获取当前语句所在的行号位置

使用时只需要将上述三个标识符当作参数进行传递即可,示例代码如下:

// 先定义一个函数
void selfTest(int a, int b, const std::string &file, const std::string &func,int line){
    std::cout << "a + b: " << a + b << "  => " << file << ":" << func << ":" << line << std::endl;
}
// 然后在mian函数中调用
int main() {
    // 调用时直接将标识符当作参数进行传递即可
    selfTest(3,8,__FILE__,__func__,__LINE__);
}

在linux终端编译文件并执行,结果如下:
在这里插入图片描述

3. 简化写法

上述方式在每次调用函数时都需要将参数传递进去,写法比较繁琐,也可采用下述方法进行简化

3.1 单独封装成函数

将输出相关信息的函数单独封装成一个函数,在需要输出位置信息时直接调用这个函数即可,示例代码如下:

#include <iostream>
#include <string>
using namespace std;

void logInfo(const string file,const string func,const int line){
    cout << "File: " << file << " Func: " << func << " Line: " << line << endl; 
}

void selfTest(int a,int b){
    logInfo(__FILE__,__func__,__LINE__);
    cout << "a + b: " << a + b << endl;
}

int main(){
    selfTest(3,8);
}

编译结果如下:
在这里插入图片描述

3.2 使用宏定义和可变参数

#include <iostream>
#include <string>
#include <cstdarg>
using namespace std;

void selfTest(int a,int b,const string &file,const string &func,const int &line){
    cout << "File: " << file << ", Func: " << func << ", Line: " << line << endl;
    cout << "a + b: " << a + b << endl;
}

// 使用的...符号是可变参函数传参的写法,可以使用__VA_ARGS__接收参数
#define selfTest(...) selfTest(__VA_ARGS__,__FILE__,__func__,__LINE__)

int main(){
    selfTest(3,8);//上面进行宏定义后,此行代码相当于selfTest(3,8,__FILE__,__func__,__LINE__)
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从本地到Gitee:一步步学习文件上传及解决常见报错问题

&#x1f642;博主&#xff1a;小猫娃来啦 &#x1f642;文章核心&#xff1a;一步步学习文件上传及解决常见报错问题 文章目录 安装git进入gitee官网&#xff0c;登录账号新建仓库先打开git命令行上传本地资源到仓库第一步&#xff1a;git init第二步&#xff1a;git add .第三…

正版软件|Splashtop Personal 个人版桌面和移动远程控制软件

Splashtop Personal 个人版 - 从平板电脑、智能手机或另一台计算机轻松远程访问 Mac 或 Windows PC 最多可达 5 台设备。在本地网络上免费使用 Splashtop Personal *即可从舒适的沙发或卧室访问家用计算机。 通过订阅 Anywhere Access Pack&#xff0c;可以从 Internet 上的任何…

JLink和ST-Link接口引脚介绍

STM32F1系列&#xff0c;STM8S系列&#xff0c;PY32F003系列都用过好久了&#xff0c;但是对JLink和ST-Link下载器认识&#xff0c;还是很肤浅的。有时候&#xff0c;需要自己接线&#xff0c;却不知道引脚定义&#xff0c;特整理如下&#xff1a; 1、ST-Link ST-Link适合对象…

按钮控件之4---QToolButton 工具按钮控件

一、设置和基本显示 QWidget w; QToolButton *pb1new QToolButton(&w); 设置文字 setText() 设置图标 setIcon() 改变图标大小 setIconSize() 设置提示文本 setToolTip() pb1.setToolTip("hello"); 二、属性 1. arrowType&#xff1a; Qt::ArrowType 设置…

如何让数据成为企业的生产力?

为什么有的企业投入大量的人力、物力、财力做数字化转型建设最终做了个寂寞&#xff01;企业领导没看到数字化的任何价值&#xff01; 如果要问企业数字化转型建设最核心的价值体现是什么&#xff0c;大部分人都会说是&#xff1a;数据&#xff01; 然而&#xff0c;不同的人…

Nginx 配置中root和alias的区别分析

root和alias都可以定义在location模块中&#xff0c;都是用来指定请求资源的真实路径&#xff0c;比如&#xff1a; location /i/ { root /data/w3; } 请求 http://foofish.net/i/top.gif 这个地址时&#xff0c;那么在服务器里面对应的真正的资源 是 /data/w3/i/top.gif文…

使用Vue + axios实现图片上传,轻松又简单

目录 一、Vue框架介绍 二、Axios 介绍 三、实现图片上传 四、Java接收前端图片 一、Vue框架介绍 Vue是一款流行的用于构建用户界面的开源JavaScript框架。它被设计用于简化Web应用程序的开发&#xff0c;特别是单页面应用程序。 Vue具有轻量级、灵活和易学的特点&#xf…

Centos7安装黑客矩阵特效软件cmatrix

一&#xff1a;Cmatrix 是一款 Linux 环境下的炫酷屏保软件 其效果类似于黑客帝国电影中的代码雨 同时该软件也是一个开源软件&#xff0c;开源项目地址&#xff1a;GitHub - abishekvashok/cmatrix: Terminal based "The Matrix" like implementation 二&#xff…

requests模块

1、简介 Requests是⼀个优雅⽽简单的Python HTTP库&#xff0c;专为⼈类⽽构建。 Requests是有史以来下载次数最多的Python软件包之⼀&#xff0c;每天下载量超过400,000次。 之前的urllib做为Python的标准库&#xff0c;因为历史原因&#xff0c;使⽤的⽅式可以说是⾮常的麻烦…

单臂路由实验:通过Trunk和子接口实现VLAN互通

文章目录 一、实验背景与目的二、实验拓扑三、实验需求四、实验解法1. PC 配置 IP 地址2. PC3 属于 Vlan10&#xff0c;PC4 属于 Vlan20&#xff0c;配置单臂路由实现 Vlan10 和 Vlan20 三层互通3. 测试在 PC3 上 Ping PC4 &#xff0c;可以 Ping 通 PC4 摘要&#xff1a; 本文…

附录1-爬虫的一些技巧

目录 1 寻找url与显示内容的关系 2 修改请求头 3 局部刷新 4 阅读返回信息 5 多尝试页面其他的使用方式 6 尝试不同类型参数 7 表单类型的post多用data发&#xff0c;接口类型的post多用json发 8 消除degger 9 你在浏览器上看到的html与你下载下来的html不一…

【LeetCode每日一题合集】2023.8.21-2023.8.27(统计点对的数目)

文章目录 2337. 移动片段得到字符串⭐解法——脑筋急转弯 849. 到最近的人的最大距离1782. 统计点对的数目&#x1f6b9;&#x1f6b9;&#x1f6b9;&#x1f6b9;&#x1f6b9;解法——从双指针到终极优化单独处理每个询问终极优化TODO 技巧总结用一个int存储两个不超过 65535…

最全数据脱敏标准汇编,有必要了解一下!(附下载)

《网络安全法》第四十二条&#xff1a;网络运营者不得泄露、篡改、毁损其收集的个人信息&#xff1b;未经被收集者同意&#xff0c;不得向他人提供个人信息。但是&#xff0c;经过处理无法识别特定个人且不能复原的除外。 《数据安全法》第二十七条&#xff1a;开展数据处理活动…

W5100S_EVB_PICO 做MQTT测试(十二)

前言 上一章我们用W5100S_EVB_PICO 开发板做Ping测试&#xff0c;那么本章我们进行W5100S_EVB_PICO MQTT的测试。 什么是mqtt&#xff1f; MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协议&#xff09;&#xff0c;是一种基于发布/订…

Linux xargs命令继续学习

之前学习过Linux xargs&#xff0c;对此非常的不熟悉&#xff0c;下面继续学习一下&#xff1b; xargs 可以将管道或标准输入&#xff08;stdin&#xff09;数据转换成命令行参数&#xff0c;也能够从文件的输出中读取数据&#xff1b; xargs也可以给命令传递参数&#xff1b;…

【Linux】地址空间概念

目录 前言&#xff1a; 地址空间回顾 验证&#xff1a;一个变量是否会有两个值&#xff1f; 一. 什么是地址空间 虚拟地址与物理地址之间的关系 二. 地址空间是如何设计的 1. 回答一个变量两个值 2.扩展 继续深入理解 三. 为什么要有地址空间 原因&#xff1a; 1. 使…

触摸屏与多台 PLC之间无线Ethernet通信

在实际系统中&#xff0c;同一个车间里分布多台PLC&#xff0c;由触摸屏集中控制。通常所有设备距离在几十米到上百米不等。在有通讯需求的时候&#xff0c;如果布线的话&#xff0c;工程量较大且不美观&#xff0c;这种情况下比较适合采用无线通信方式。本方案以威纶通触摸屏和…

解决解析maven依赖加载卡住问题

首先找到用户设置文件的位置&#xff1a; 根据位置查找文件&#xff0c;没有则创建。 修改maven的默认镜像为阿里云镜像。 <mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/pub…

直播进入新风口:XR虚拟直播市场火爆,未来发展势不可挡

&#xfeff; 近年来&#xff0c;直播行业随着技术的不断发展&#xff0c;呈现出了蓬勃的发展态势。在这个竞争日益激烈的直播行业中&#xff0c;XR虚拟直播成为了最新的风口。XR虚拟直播是一种新型的直播形式&#xff0c;通过虚拟现实技术&#xff0c;让用户置身于直播现场&a…

使用生成式 AI 增强亚马逊云科技智能文档处理

数据分类、提取和分析对于处理大量文档的组织来说可能具有挑战性。传统的文档处理解决方案是手动的、昂贵的、容易出错的,并且难以扩展。利用 Amazon Textract 等 AI 服务,亚马逊云科技智能文档处理(IDP)允许您利用业界领先的机器学习(ML)技术来快速准确地处理任何扫描文档或图…