打印源码自身的C++程序

优雅地打印堆栈跟踪信息——Backward-cpp 而 Backward 会将堆栈信息打印出来,帮助定位。有点像gdb时的backtrace只有当源文件可访问时,它才能显示代码片段。所有以管道“|”为前缀的“源”行和代码片段都是内联下一帧的帧。项目源码本质上只有文件,集成到自己的程序中非常方便,如果加入文件一起编译,则自己代码中不需要调用Backward-cpp中的函数,非常方便。 阅读详情

思路:先写好框架。将框架转换成字符串形式。

处理引号、换行:这两种字符一般 在字符串会转义,因此替换时不能直接写,要用ASCII值表示。

#include <iostream>
using namespace std;

string replace_all(string src, char tc, string const & w)
{
  string s(src);
  string t(1, tc);
  unsigned int pos = s.find(t), t_size = t.size(), r_size = w.size();
  while(pos != std::string::npos){
    s.replace(pos, t_size, w);
    pos = s.find(t, pos + r_size );
  }
  return s;
}

int main()
{
  char const *s = "#include <iostream>\nusing namespace std;\n\nstring replace_all(string src, char tc, string const & w)\n{\n  string s(src);\n  string t(1, tc);\n  unsigned int pos = s.find(t), t_size = t.size(), r_size = w.size();\n  while(pos != std::string::npos){\n    s.replace(pos, t_size, w);\n    pos = s.find(t, pos + r_size );\n  }\n  return s;\n}\n\nint main()\n{\n  char const *s = |@|;\n  char const q[] = {34,0};\n  char const n[] = {92,110,0};\n  cout << replace_all(replace_all(s,124,q), 64, replace_all(s, 10, n));\n}\n";
  char const q[] = {34,0};
  char const n[] = {92,110,0};
  cout << replace_all(replace_all(s,124,q), 64, replace_all(s, 10, n));
}


从源码求证tensorflow中os.environ["TF_CPP_MIN_LOG_LEVEL"]的值的含义 看代码时遇到了os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'这样一句话,于是开始百度,是设置log输出信息的,也就是程序运行时系统打印的信息。 &amp;amp;amp;nbsp; 但是发现有两种答案: 一种是这样说的 还有一种是这样说的 … … 一脸懵逼 阅读详情

相关推荐

由Google Log库glog循环打印到一行引发的C++知识点思考

Google Log库glogglog是Google的一个C++日志库,原文见http://google-glog.googlecode.com/svn/trunk/doc/glog.html。其使用方法类似于:LOG(INFO) << "Found " << num_cookies << " cookies";使用相当方便!输出会类似于:xxxxxxxx] Found 123456 cookies

lt123345的专栏 3261

C++打印程序自身

#include #include #include #include using namespace std; int main(){ ifstream in("Scopy.cpp"); string s; while(getline(in,s)) cout<<s<<"\n"; system("pause"); return 0; }

tiger1334的专栏 584

Win8 x64一个程序打印出各种基本类型、几个指针类型

/*---------------------------------------------------- 写一个程序打印出各种基本类型、几个指针类型和几个你所选择的枚举类型的大小。 使用 sizeof 运算符。 --------------------------------------------------------*/ #include #include using std::co

SangYang 1495

C++输出自身源代码--Quine

0x01.问题 在这道题你需要返回一个字符串,这个字符串就是你提交的代码本身。 C++类形式为: class Solution { public: string q() { } }; 0x02.解决 这其实是一个著名的Quine 程序。 官方解释: A quine is a computer program which takes no input and pro...

ATFWUS的博客 2万+

【附源码】如何C语言打印出心形表白?

烟花代码,C/C++烟花代码:新年跨年最强烟花祝福程序,详细的烟花程序教程最新出炉 ~,C++五子棋代码实现(内附源码),C++烟花表白程序,【内附源码】烟花表白代码:1分钟用【C语言/C++】带你写个“浪漫烟花”,俘虏女神的心!,【内附源码】最强C语言新年烟花表白,跨年的时候给你的那个她(他)来场极致浪漫的代码烟花雨!,用代码写烟花,要源码滴打2,【AE教程】简单漂亮烟花文字合成效果。我们分了4部分,前3行一部分,4-6行一部分,7-13行一部分,最后一行一部分,读者请仔细阅读注释,已经写的很详细了。

yx5666的博客 1339

C++ 简单文件输入输出 | 九七的C++教程

C++多线程: 有std::thread和pthread两种C++使用方法 cs:critical section,临界区 mutex:互斥量 semaphores:信号量 Event:事件 C++文件读写 #include #include //加载c++用于文件读写的头文件 ofstream outFile; //实例化ofstream类,创建outFile对象,outFile是对象名字,可以随便取,以后的操作就是对outFile对象进行的 outFile.open(“filename.txt”);

九七的博客 2027

Linux基础命令---echo打印内容到标准输出

echo echo指令可以输出内容到标准输出,以空白分割字符串,并且后面增加换行。 此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora。 1、语法 echo[-neE][arg ...] 2、选项列表 选项 说明 -n 输出字符串...

wj78080458的专栏 1563

C++PDF打印库源码

C++生成PDF文件

打印自身源代码的程序

无意当中看到了这样一个问题: 任意选定一个语言写一个打印自身源代码的程序,这个程序不允许读取或者写其他文件的数据,程序必须是完全独立的。 很有趣吧?我正在学习C语言,这个问题是我在查找其他资料时看到的,这激发了我的兴趣,我躺在床上想了很久,没有一点头绪,额,最后抱着认为不大可能实现的想法睡着了······ 回到正题,我在网上搜索了有关资料以后,知道了如何去写出这样的一个程序,原理

尽力而为 4528

GNSS数据处理(一)——开源软件RTKLIB与G-Nut/Anubis实战入门

本文详细介绍了GNSS数据处理的开源软件RTKLIB与G-Nut/Anubis的实战入门指南。从软件安装、数据获取到静态短基线解算,逐步讲解操作技巧与常见问题排查,帮助测绘与地质监测人员快速掌握GNSS数据处理技术,提升工作效率。

weixin_30733003的博客 133

【Gin框架入门到精通系列01】Gin框架介绍与环境搭建

本文是Gin框架入门到精通系列的第一篇,系统介绍Gin框架的基本概念、核心特性以及环境搭建。无论你是Go语言新手还是有经验的开发者,都能通过本文快速掌握Gin框架的基础知识,创建并运行你的第一个Gin应用。

GopherTribe的博客 1560

让C++程序打印自身源码

本人原创文章,欢迎阅读,禁止转载。 这绝对是惊艳到让你眼前一亮(为了简洁,故意没考虑资源问题和编译警告)。 1 #include <iostream> 2 #include <fstream> 3 #include <string> 4 using namespace std; 5 int main(int argc,char* ar...

weixin_30314813的博客 256

STM32 使用rtthread的DMA 串口发送失败

在一次使用RTthread的DMA 串口发送时,持续性通过DMA 发送串口数据时,偶发发送过程中后续数据包无法正常发送出去,后经查,发现为RT-Thread的串口中断处理有瑕疵,后做出修改。另,为了更方便的排查为题,建议修改。左为修改前,右为修改后。

qq_39294918的博客 1108

使用makefile编译时自动在程序打印的版本信息里加上git提交信息的方法

在main()函数里调用print_git_commit_info()函数,使得程序运行时打印出git相关版本信息。print_git_commit_info()函数里的几个宏通过makefile里的gcc -D参数传入。如果每次make编译时,能够自动调用git命令更新.cpp源码文件里记录的软件版本信息,就可以确保一定能找到该可执行程序对应的源码。调试生成环境的程序,第一步就是根据程序打印的软件版本号信息去git仓库找到对应的代码。前提条件:编译电脑要安装并配置好git工具。

weixin_42286079的博客 459

flowable工作流源码解析-DB访问

Flowable用了mybatis组件,又实现了自己的command和interceptor机制。具体是怎么实现的呢? 我们以Deployment操作为例,来看看它的调用链 调用端是Service接口, 它委托自己的commandExecutor去执行具体的Command. Command最终会调用到EntityManager,然后委托给ibatis的sqlsession来完成操作。 其中CommandExcutor调用command的地方有些复杂,我们展开看: CommandExecutor会维护一系

coobee的博客 2484

SwarmClaw:自托管多智能体AI运行时部署与实战指南

多智能体系统是人工智能领域的重要发展方向,它通过多个具备自主决策和协作能力的智能体共同完成任务,其核心原理在于分布式问题求解与协同规划。这种架构在提升任务处理效率、复杂问题分解和鲁棒性方面具有显著技术价值,广泛应用于自动化工作流、虚拟团队协作、智能客服和个性化助手等场景。本文聚焦于SwarmClaw这一自托管的多智能体AI运行时,它原生支持Model Context Protocol,并内置了超过23种AI提供商,为开发者提供了一个开箱即用且高度可定制的控制平面,便于构建和管理复杂的多智能体协作网络。

weixin_27207591的博客 401

QML笔记-QML基本数据类型的使用

目录 基本概念 举个栗子 基本概念 这里的数据类型不仅仅有C++里面的int,String等, 还有个很有特点的类型var,这个又可以放数组,也可以放函数,也可以混着换,很少有趣。 举个栗子 程序运行截图如下: 后台打印如下: 源码如下: import QtQuick 2.9 import QtQuick.Window 2.2 Wi...

IT1995的博客 7971

VSAN 虚拟机丢失排查与恢复完整方案

VSAN虚拟机(含vCenter)显示无效 检查存储状态:登录ESXi Host Client,确认VSAN存储是否挂载。 若未挂载,通过SSH执行 手动挂载。 验证文件存在:检查虚拟机文件是否完整。 解除文件锁定:删除残留的 .lck 文件 手动注册虚拟机:强制注册虚拟机配置文件。 检查VSAN健康:验证集群节点在线、磁盘组状态正常,并测试节点间网络。 修复元数据:针对损坏对象,谨慎执行修复。 终极恢复:若数据丢失,从备份还原或联系VMware支持,提交日志

sido777的博客 2679

打印机驱动源码

打印机驱动源码 去发现同类优质开源项目:https://gitcode.com/ 简介 本仓库提供了打印机驱动程序的源码,适用于希望开发打印机驱动的开发者参考。源码基于DDK(Driver Development Kit)并使用C++编写。 描述 此源码包含了打印机驱动的核心代码,是开发打印机驱动程序的重要参考资源。如果您对打印机驱动开发感兴趣,或者需要开发一款新的打印机驱动程序,这份代码将为您提...

gitblog_06758的博客 512

Altium Designer应用技巧13: 四层板的拼版方法

本文介绍在Altium Designer中,进行4层板的拼版方法。Altium Designer有多种拼版方法,本文选择最直观的复制、删帖方法来完成,步骤如下: 1、看一下原始文件,如下图所示,我们要对该板进行拼版操作。 2、通过菜单“报告”-“板子信息”得到板子大小,在这里一般切换为mm比较好操作,我们可以使用快捷键"q"。 3、如果是水平拼版,我们需要关心水平长度;如果是垂直拼版...

snmplink的博客 1万+

pycharm一直选择不了conda正确路径弹框报错:latinit property envs_dirs has not been initialized...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 2913

paip.c++程序崩溃的汇编级别调试-打印堆栈-gcc gdb

paip.c++程序崩溃的汇编级别调试-打印堆栈-gcc gdb 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.youkuaiyun.com/attilax c++程序崩溃直接出来的是个汇编级的指令以及堆栈,无法直接看到c++源码的哪一行出问题了.. 要是VC编译的程序崩溃时,取得DMP,

attilax的专栏 3981

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Android-Hal-C++打印调用栈

Android-Hal-C++打印调用栈 debuggerd是android的一个daemon进程,负责在进程出错异常时,将进程的运行时信息给dump出来供分析。 debuggerd的core dump数据,被保存在 /data/tombstone/ 目录下,共可保存10个文件,当超过10个时,会覆盖最早生产的文件。 在debug时,一般情况下,当程序出现异常时会自动将core dump信息保存起来。 当需要手动调试自己的程序并需要主动打印调用栈时,可以使用Android的callstack库。使用步骤如下

halazi100 4268

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

GDB 学习

通常使用gdb在Linux下调试C/C++程序,编译的时候加上-g选项(gcc -g ......)。下面总结的是我自己经常使用(当然也有一些用的比较少)的gdb命令。 (1)开始及退出 开始:gdb program 退出:quit (简写q)或者Ctrl+d (2)自动补全:Tab (3)启动程序: run(简写r):运行程序直到遇到断点 与srart的区别:...

ace15452的博客 112

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

[转载]从源码求证tensorflow中os.environ["TF_CPP_MIN_LOG_LEVEL"]的值的含义

看代码时遇到了os.environ[‘TF_CPP_MIN_LOG_LEVEL’] = '2’这样一句话,于是开始百度,是设置log输出信息的,也就是程序运行时系统打印的信息。   但是发现有两种答案: 一种是这样说的 还有一种是这样说的 … … 一脸懵逼

bfhh521的博客 405
上一篇: 小BUG:OpenGL无法清屏
下一篇: 寻找大于2^N的最小质数
CodeArhat
博客等级 码龄15年 13粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值