把libcsdbg封进自己的程序

libinstrument (ex libcsdbg)-开源 Libinstrument是为C / C ++进行自定义功能检测的一种完整而简便的方法。 该项目准备就绪,具有经典的仪器仪表应用程序,例如AOP(面向方面​​的程序设计),关注和副作用注入,堆栈跟踪,异常跟踪,基本时间剖析,调用图剖析等。 GC(垃圾收集器)模块也正在开发中。 Libinstrument具有高度的便携性和去耦性。 该项目带有CMake构建系统,与IDE(CLion,Eclipse等)的集成非常简单。 使用惰性算法,基准测试的开销几乎为零,执行时间的开销最小。 Libinstrument尝试尽可能地避免干扰,同时尝试帮助开发人员提供基本的思考。 每个类和方法都有单元测试,测试由CTest驱动。 立即下载

        作为一个写C/C++的程序员,内存问题总是一个大问题,与堆栈打交道总是避免不了的,而且你也要坚信一件事情,你代码风格如何好,你总会犯错,但是编译器帮不了你的时候,如果有别的工具能在这些事情上帮助你总是很好的。我相信,调试内存泄漏、堆栈被破坏之类的问题,对大家来说一定不是一个好的回忆。所以尽可能地使用一些工具是很好的做法。可以说一下,valgrind更出名,而且功能也很强大,但问题是,valgrind编译出来之后我发现实在太大了,主要的东西得有一百多M,当然在PC端或者一些资源丰富一点的硬件板上是没问题的,但是我用的板子实在比较弱小,这个时候libcsdbg帮到你!

        简单介绍一下,这个是一个开源库,主要功能如下:

  复杂的异常堆栈跟踪(支持 addr2line)

  POSIX 线程堆栈跟踪详情(支持 addr2line)

  完全支持 Position Independent Code (for DSO)

  最简单以及最小化的代码接口,透明的库集成

  简单的库运行配置

  最小的额外开销

  支持通用 throwables 和用户自定义异常类型

  支持各种目标对象格式(elf, a.out, coff, ecoff e.t.c)

  支持各种文件格式(programs/libraries, archives, core dumps)

  支持 32/64 位系统

  支持 big 和 little endian CPUs

  提供 x86, x86_64, ARM 7/9/11/thumb, Leon 2/3, AVR32, MIPS 编译版本


        功能介绍完毕,开始说该怎么用起来了。


1. 首先要下载啊

http://sourceforge.net/projects/libcsdbg/

这个链接里就是最新版了,当然也可以下一些旧一点的版本,我就是这样的,只是下了1.27,因为1.28一开始编不过,不肯定什么问题,然后发现1.27也一样,才发现,原来自己恶心的工具链的问题。

2. 编译

既然要用起来,那首先就得编译成,虽然感觉难度不大,还是需要搞一下。解压那些不说了啊,就把里面的makefile里的PLATFORM改成自己编译器对应的前缀,否则就是用系统的GCC编译了。执行的时候用./build,不是直接make的,要注意一下,其他的都没什么了。至于工具链的问题我就不详细说了,有问题也可以提出来大家探讨,我说一下我用的GCC,唉,居然对应的binutil没有bfd所有的东西,然后我就无语了。没有bfd.h啊,肯定编不过了,然后我从别的地方拖了一个进来,还有一些系统枚举值不支持啊之类的,只能自己改改代码了,最后好不容易编过了。一切的起因就是因为我的编译器用的东西比较老?谁叫linux喜欢不向下兼容呢。我直接什么都不改,sudo ./build完全没问题啊,提醒一下,如果真的给自己PC端程序用,或类似的情况下最好就用超级用户去做,或者某些比较通用的linux都支持的sudo。其他编译的问题可以./build -h查看。

编译顺利的话,可以在编译目录下的lib目录中找到你想要的libcsdbg.so,提醒一下,这是一个软连接,至于链到哪很明显的。

3. 编译自己的程序,并链接

得到了so之后就是链接到自己的程序里了。理论上链接一个so是很简单的,但是,问题是,刚刚说到的,它需要用到bfd(一个正常的binutil里面会编译出一个libbfd.so的,顺便告诉你,bfd是一个库),所以很明显,链接选项至少是-lbfd -lcsdbg。又要说一个很恶心的东西,由于我的工具链没有bfd相关的所有,所以很明显,libbfd.so这个库也是没有的,不要气馁,没用的,哭去吧。然后我的做法是自己编译一下binutil啊,有其他办法吗?编译一个binutil给自己用啊,就为了它的libbfd.so,顺带的你也得到了bfd.h了。以上的纯粹是个人用的编译器恶心的问题,还是直接给出需要的。

链接选项加上:-lcsdbg -ldl -lbfd -lpthread

编译选项加上:

CFLAGS += -g

CFLAGS += -finstrument-functions
CFLAGS += -finstrument-functions-exclude-file-list=/opt/hisi-linux-nptl/arm-hisiv100-linux/include
CFLAGS += -finstrument-functions-exclude-file-list=iostream
CFLAGS += -finstrument-functions-exclude-file-list=ios
CFLAGS += -finstrument-functions-exclude-file-list=istream
CFLAGS += -finstrument-functions-exclude-file-list=ostream
CFLAGS += -finstrument-functions-exclude-file-list=../../csdbg/include/csdbg

-finstrument-functions这是一个多么美好的选项,可以记录调用过的函数,-finstrument-functions-exclude-file-list这个选项就是去掉哪些不需要记录的文件,那样的话可以去掉一些你不需要调试的函数,尤其系统的你当然不需要去关心了,出错最多的都是你自己!关于这个gcc选项的介绍推荐看这个blog:

http://blog.youkuaiyun.com/hengshan/article/details/7869472

当然也可以自己看gcc官方文档的。

大概就这样能把你的程序和libcsdbg链接起来了。



我的版本是,最后都成功编译过了链接过了,一跑就立马段错误,不链这个库却没问题,放弃了,理论上这个库使用起来是很简单的,而且功能足够好,自己用的编译器缺了bfd,没办法。

2023华为od机试真题【恢复数字序列】C++ 2023华为od机试真题【恢复数字序列】C++ 对于一个连续正整数组成的序列,可以将其拼接成一个字符串,再将字符串里的部分字符打乱顺序。如序列8 9 10 11 12,拼接成的字符串为89101112,打乱一部分字符后得到90811211,原来的正整数10就被拆成了0和1。现给定一个按如上规则得到的打乱字符的字符串,请将其还原成连续正整数序列,并输出序列中最小的数字. 输入描述 阅读详情

相关推荐

MRI多序列,多中心数据集预处理--使用FSL-Flirt 配准数据

FLIRT(FMRIB 的线性图像配准工具)是用于线性(仿射)模态内和模态间脑图像配准的全自动稳健且准确的工具。 什么是配准 在这两张图片上,很容易看出它们没有对齐,左边相对右边倾斜,虽然我们人类视觉系统还是能把对应的解剖关系连系在一起,但是我们使用计算机分析时确不能够 因此,我们希望相同的解剖结构对齐,用坐标表示的话,希望他们在相同的坐标上。如下图 对齐这些解剖结构的过程就叫做配准(register) 因此,配准的目的也是使相同的解剖结构在同一个位置,便于分析。可以将CT和MRI配准,看同一结构在两个

Tina姐的博客 1万+

gcc命令行选项说明

GCC 支持许多命令行选项,这些选项控制将运行时检测添加到其通常生成的代码中。例如,检测的一个目的是收集分析统计信息,以用于查找程序热点、代码覆盖率分析或按配置文件优化。另一类程序检测是添加运行时检查,以检测编程错误,如无效的指针取消引用或越界数组访问,以及故意的恶意攻击,如堆栈粉碎或C++ vtable 劫持。还有一个通用的钩子,可用于实现其他形式的跟踪或函数级检测,以进行调试或程序分析。 -p -pg 生成额外的代码以编写适合于分析程序(用于)或(用于)的配置文件信息。在编译要访问其数据的

smartvxworks的博客 3023

WSL2+Docker+Ollama:解锁Windows本地GPU加速运行DeepSeek-R1模型

本文详细介绍了在Windows系统上,通过WSL2、Docker和Ollama的组合方案,实现本地GPU加速运行DeepSeek-R1模型的全过程。该方案解决了Windows环境下Ollama默认无法调用NVIDIA显卡的痛点,通过配置Docker的GPU支持,强制将计算任务分配给GPU,从而显著提升文本生成速度与效率,为开发者提供了一个便捷的本地AI测试环境。

weixin_28452161的博客 357

linux libiberty.so和bfd.so一般放在那里,oprofile安裝和使用

1.概述oProfile是用於Linux的若干種評測和性能監控工具中的一種,它可以工作在不同的體系結構上,包括MIPS、ARM、IA32、IA64和AMD。oProfile包含在Linux2.5和更高版本的內核中,也包含在大多數較新的Linux版本中,包括RedHat9。oProfile是Linux平台上的一個功能強大的性能分析工具,支持兩種采樣(sampling)方式:基於事件的采樣(event...

weixin_42554394的博客 279

SQLite性能优化:从WAL模式到内存映射的深度解析

本文深入解析SQLite性能优化策略,重点介绍WAL模式和内存映射技术的应用。通过合理配置WAL日志、同步策略和事务批处理,SQLite的IO吞吐量可提升3-5倍。结合内存映射和缓存优化,性能可进一步提升至默认配置的50倍,适用于高并发读写场景。

weixin_29231027的博客 455

【AutoDL】使用云服务器跑深度学习代码

1.算力市场 租用服务器,选择自己心仪的服务器2.镜像可以选择一些基础的镜像,社区镜像里是git上有的环境。3.上传文件在文件存储中,选择上传的区,在右边点击上传,选择自己的文件上传到云服务器中。

weixin_45768644的博客 3703

linux libiberty.so和bfd.so一般放在那里,linux - 尝试为ARM构建GDB时出错 - 堆栈内存溢出...

我正在尝试在Ubuntu 16.04计算机上为手臂构建GDB(8.0版)。 我打算直接在Arm机器上调试它(当前没有服务器)。我已经执行这些指令(因为它是解释在这里 )./configure --target=arm-linux-gnueabi --host=arm-linux-gnueabi --build=x86_64_unknown-linux-gnumake在链接期间,系统向我抛出此错误...

weixin_32659841的博客 338

EMQX 结合MySQL实现精细化ACL权限管理实战

本文详细介绍了如何通过EMQX结合MySQL实现精细化的ACL权限管理,提升物联网设备接入和消息传输的安全性。内容包括环境准备、基础配置、权限规则设计技巧以及高级应用与性能优化方案,帮助开发者快速掌握动态生效、便于管理的权限控制方法。

weixin_28683689的博客 197

gcc –finstrument-functions特性的应用

1          gcc –finstrument-functions特性的应用       这几天看了一下nginx的源码,分析过程中发现nginx模块加载、初始化这部分利用了函数指针的方式挂在的,通过阅读源码的方式寻找函数调用关系比较吃力。所以想起了通过gcc的–finstrument-functions特性,打印出函数调用栈。参照这个调用栈,再来分析代码,容易多了。gcc这个特性最大的

hengshan的专栏 7399

SVDD和OCSVM的比较

OCSVM(one class support vector machine)即单类支持向量机,最先提出的文献为:Estimating the support of a high-dimensional distribution.该模型 将数据样本通过核函数映射到高维特征空间,使其具有更良好的聚集性,在特征空间中求解一个最优超平面实现目标数据与坐标原点的最大分离,如图1: 坐标原...

qq_33880788的博客 1万+

8、音频运行时系统的架构设计

本文深入探讨了音频运行时系统的分层设计及其优势,包括逻辑层和物理层的功能划分。通过分层设计,开发者可以更轻松地管理和优化音频资源,确保其在不同平台上的高效运行。文章还介绍了平台适配与优化、错误处理与调试以及未来发展方向等内容,为开发者提供了宝贵的参考和指导。

juice的博客 462

Linux调试工具

1. 使用printf调试 #ifdef DEBUG Printf(“valriable x has value = %d\n”, x) #endif 然后在编译选项中加入-DDEBUG 更复杂的调试应用如: #define BASIC_DEBUG 1 #define EXTRA_DEBUG 2 #define SUPER_DEBUG 4

bugouyonggan的专栏 1万+

Zemax与Matlab交互:双胶合优化详细流程

Zemax与Matlab交互:双胶合优化详细流程

weixin_72050316的博客 629

ubuntu 编译 libcsdbg

版本libcsdbg-1.11  ubuntu 12.04 直接make 找不到 bfd.h 更新binutils-dev sudo apt-get install binutils-dev

zhangdell的专栏 1150

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

温度PID控制PLC程序

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

调试技巧之 gcc/g++ -instrument-functions 参数

参考      GCC 函式追蹤功能 finstrument-functions __attribute__ +用 Graphviz 可视化函数调用      ibm 用 Graphviz 可视化函数调用        gcc/g++使用-finstrument-functions來觀察code每個function的呼叫      http://www.logix.cz/michal/de...

weixin_33796177的博客 337

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

linux libiberty.so和bfd.so一般放在那里,MIPS平台目标机安装Oprofile时出现error

在Debian下安装Oprofile重要:应该使linux内核选项支持在 .config 文件中设置CONFIG_PROFILING=y和CONFIG_OPROFILE=y。重新编译,烧写。使用apt-get update && apt-get install oprofile oprofile-gui或手工安装直接从网上下载oprofile-0.9.8(http://oprofi...

weixin_42568801的博客 325

linux libiberty.so和bfd.so一般放在那里,Ubuntu下oprofile的安装过程问题记录

这里的Linux源代码版本是:linux-3.12.6在Documentation/Changes文件中,提到编译环境所需要的其中一条:oprofile 0.9 # oprofiled --version为了能顺利编译Linux内核,要提前安装好该软件,折腾了一天,总算装好了,记录一下,以免下次再碰壁.oprofile是什么? OProfile是Linux内核支持的一种性能分析机制。 它在时钟中断...

weixin_35066076的博客 294

使用BFD操作ELF

使用BFD操作ELF作者:alert7                      alert7@xfocus.org             >主页: http://www.xfocus.org时间: 2001-9-21★1. 前言 BFD是Binary File Descriptor的简称。我们可以使用它来方便的操作应用程序,可以在你不了解程序文件格式的情况下,读写ELF header,prog

guojiwei2002的专栏 2113

Android初学之路—Android系统框架

从下到上依次为: 1.Linux内核(Linux Kernel) Android系统的最底层是基于Linux内核实现的,它负责硬件驱动、网络管理、电源管理、系统安全、内存管理等。例如它可以负责显示驱动、基于Linux的帧缓存驱动、键盘驱动、Flash驱动、摄像头驱动、音频视频驱动、WiFi驱动等。 2. Android核心类库(Libraries) Android系...

李伟驰的博客 599

Android沙盒开发之系统libc库定制修改

2013-07-29, 22:29:09  【原创】Android沙盒开发之系统libc库定制修改 标 题: 【原创】Android沙盒开发之系统libc库定制修改 作 者: 蟑螂一号 时 间: 2013-07-29,21:52:11       android系统中libc是c层中最基本的函数库,libc中封装了io、文件、socket等基本系统调用。

水也的博客 5029

理解 Linux 动态库加载:LD_LIBRARY_PATH

flyfish

二分掌柜的 353
上一篇: 使用WinHttp接口编程的心得
下一篇: libcurl在vs2013下C++项目中的编译连接
sunnyleevip
博客等级 码龄15年 7粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值