gdb调试动态库

2023-11-04

Happy Niu Year.


step1: 编译一个linux动态库

头文件get.h:

#ifndef get_H

#define get_H
int get();

int set(int a);

#endif

实现文件get.cpp:

#include <stdio.h>
#include "get.h"

static int x=0;

int get(){
   return x;
}

int set(int a){
  x=a;
  return x;
}

g++编译出一个名字为libggg.so的库:

g++ get.cpp -shared -g -fPIC -DDEBUG -o libggg.so  (64bit machine)

 

step2: 写一个调用该库的程序

pkk.cpp

#include <stdio.h>
#include "get.h"

int main(){
    int a=3;
    int b=get();
    int c=set(a);
    int d=get();
    printf("a=%d, b=%d,c=%d,d=%d\n", a,b,c,d);
}

g++编译一下子:

g++ pkk.cpp -o app -Wall -g -lggg -Lxx/xx/xx

Note: -lggg表示需要用到名字为ligbbb.so的库; -Lxx/xx/xx表示除了默认的库搜索路径之外,链接器需要到xx/xx/xx路径去搜索库文件;

运行:

假设当前所在目录为app所在目录,则:

首先,需要将libggg.so所在目录添加到环境变量中:export LD_LIBRARY_PATH=/home/xxx/Documents/learn/myLibs:LD_LIBRARY_PATH

然后运行./app 即可。

 

step3: gdb调试该程序

首先,gdb ./app来基于gdb启动程序.

然后, 如果你想在get.cpp文件的第7行设置断点,则,需要将该文件的路径通过dir指令告诉gdb,所以吧,源文件是可以随便挪动的,如下文指示。

在get.cpp文件的第7行设置断点的方法:  b get.cpp:7, 回车后会提示:

No source file named get.cpp.
Make breakpoint pending on future shared library load? (y or [n])

请选择y。

 

Note:

1)gdb设置动态库的源文件查找路径:

进入gdb之后,show dir命令,显示当前所有的查找路径。 在当前的基础上增加一个路径:dir  xx/xx。 该指令在退出gdb后即失效。  曾经尝试dir  xx/xx,然后get.cpp文件位于xx/xx/source/get.cpp,然后设置断点时使用b source/get.cpp:7,不行!


关于gdb查找路径:https://www.cnblogs.com/rickyk/p/4184860.html

2)gdb调试时使用配置文件: 亲测可以哦

下一个配置文件gdbConfig:

file /xx/xx/xx/app
dir /xx/xx/sourcefileDir

file表示要运行的可执行文件

dir表示你添加的源文件搜索路径,相当于你执行了一次dir /xx/xx/sourcefileDir.

 


ref:

https://blog.csdn.net/rikeyone/article/details/90051341

https://blog.csdn.net/xcw_1987/article/details/81942272

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gdb调试动态库 的相关文章

  • 将大核心文件转换为“minicore”文件

    如何将核心文件减少到仅线程堆栈 我希望能够运行 gdbthread apply all bt在迷你核心上 仅此而已 我正在处理大型 gt 4GB 多线程 Linux ELF 核心文件 这些文件太大而无法返回进行分析 我见过谷歌断点器 htt
  • GDB可以杀死一个特定的线程吗?

    我正在运行一个应用程序 firefox 我想知道是否可以使用 GDB 附加到进程并杀死特定线程 有没有办法做到这一点 我知道此操作可能会使应用程序崩溃 EDIT 在此调试会话中 ps ax显示firefox pid是1328 gdb App
  • 如何让 gdb 保存命令历史记录?

    我该如何设置gdb这样它就可以保存命令历史记录 当开始新的gdb会话 我想使用向上箭头键来访问之前会话的命令 简短回答 mkdir p config gdb echo set history save on gt gt config gdb
  • 在运行时从应用程序读取调试信息

    除了调试之外 我还有一些关于调试符号以及可以用它们做什么的问题 我最感兴趣的是有关 GCC 的答案 但我也很高兴知道它在其他编译器 包括 MSVC 下的样子 首先 调试符号的常见格式 类型有哪些 它们与编译器和平台有何关系 GCC 和 Mi
  • 如何在 gdb 上进行 grep 打印

    有没有办法在 gdb 中 grep 打印命令的输出 就我而言 我正在使用 gdb 调试核心转储 并且我正在调试的对象包含大量元素 我发现很难寻找匹配的属性 即 gdb print this grep
  • 使用 gdb 调试时彻底退出 valgrind

    我正在使用 valgrind 和 gdb 调试程序 然而 我以一种野蛮的方式终止了这些调试会话 这真的是它应该做的吗 设置调试会话 按照来自的指示valgrind 官方网站 http valgrind org docs manual man
  • 有没有办法在 gdb 中设置一个以调用堆栈为条件的断点?

    我正在 Linux 上的 gdb 7 1 中调试 C 我有一个函数a 代码中很多地方都会调用它 我想在其中设置一个断点 但前提是它是从b 有什么办法可以做到吗 有没有办法做到这一点 只有当b 被叫自c 等等无穷无尽 Update 现在有一个
  • dprintf 与 break + 命令 + continue 之间有什么区别?

    例如 dprintf main hello n run 生成与以下内容相同的输出 break main commands silent printf hello n continue end run 使用是否有显着的优势dprintf ov
  • 在 GDB 中显示结构体值

    在 GDB 中 给定一个指向结构体的变量 print将显示原始指针值并x将显示指向的原始字节 有什么方法可以显示指向该结构的数据 即字段及其值的列表 print variable 如果这样做 它将在 GDB 中显示该变量的值 您还可以选择显
  • Eclipse 调试模式下的 GDB 找不到 stdlib/rand.c

    我试图让 gdb 在 ubuntu 上与 eclipse cdt 一起运行 以开始调试一些简单的程序 所以我做了我认为必要的步骤来让它运行 1 创建可执行项目 2 Compile 3 Run 4 创建文件 gdbinit 并将其放在主项目文
  • gdb 中的 是什么意思?

    gdb n 134 a b c 0xdeadbeef uint32 t length initval gdb n gdb p a 30
  • gdb 错误 - 文件不是可执行格式:无法识别文件格式

    我正在尝试使用 gdb 调试某个名为 xdf 的程序 但是当我运行 gdb xdf 时 出现以下错误 home nealtitusthomas X ray astronomy heasoft 6 24 x86 64 pc linux gnu
  • TUI模式下的GDB:如何处理stderr与ui的交互

    我正在尝试使用gdb来调试caffe http caffe berkeleyvision org 我更喜欢使用 tui 模式 因为它允许我查看整个源代码而不仅仅是一行 但有一个问题 每当程序caffe输出一些东西stderr 输出扭曲了 t
  • 如何将整个 GDB 会话转储到文件中,包括我输入的命令及其输出?

    在 bash 中 我可以使用script命令 它将 shell 上显示的所有内容转储到文件中 包括 键入的命令 PS1 line 命令的 stdout 和 stderr gdb 中的等效项是什么 我试着跑shell script从 GDB
  • Fortran 在 gdb 中打印可分配数组

    我正在向开源科学代码添加一些功能 我使用很多可分配项 但在正确打印它们时遇到一些问题 例如 我声明并分配 然后使用 real dp allocatable psi n phi some other stuff here allocate p
  • gdb查找行号的内存地址

    假设我已将 gdb 附加到一个进程 并且在其内存布局中有一个文件和行号 我想要其内存地址 如何获取文件x中第n行的内存地址 这是在 Linux x86 上 gdb info line test c 56 Line 56 of test c
  • 评估 gdb 中的变量/函数

    我有以下代码 char seg mmap 0 printf seg x n seg 该程序打印seg b7ffd000 而在 gdb 中 对于相同的执行 当使用p x seg 它打印 2 0x0 我在这里很困惑 这不是同一个var吗seg
  • 如何在 VSCode 中配置调度程序锁定 gdb 选项

    我可以添加额外的参数launch json到 gdb 通过miDebuggerArgs https code visualstudio com docs cpp launch json reference midebuggerargs 像这
  • GDB 脚本编写为 MOCK

    我正在尝试使用 GDB 模拟一个函数 用于单元测试父函数 一种方法是在您想要模拟和使用 GDB 的函数中设置一个断点return命令 但是当 GDB 时我无法做同样的事情call使用命令 gdb b secret check Breakpo
  • 漂亮的地图打印机会抛出类型错误

    我已经使用配置了漂亮的打印机http wiki eclipse org CDT User FAQ How can I inspect the contents of STL containers 3F http wiki eclipse o

随机推荐

  • PyTorch深度学习实战(8)——批归一化

    PyTorch深度学习实战 8 批归一化 0 前言 1 批归一化原理 2 批归一化优势 3 批归一化对模型训练的影响 3 1 未使用批归一化 且输入值较小 3 2 使用批归一化 且输入值较小 3 3 使用批归一化 且输入值较大 小结 系列链
  • element ui自定义主题

    一 在element ui 里找到自定义主题 1 1 在自定义主题 设置对应的颜色 并下载 1 2 在项目目录下安装element theme element theme chalk npm i element theme chalk 2
  • virtio sr-iov

    虚拟机规格 12核 32G内存 负载模拟 利用bc将CPU所有核占用提高的98 echo scale 500000 4 a 1 bc l q VirtIO 9 37 Gbps 4 5 12 SR IOV 9 40 Gbps 4 5 7 低负
  • 蓝桥杯单片机组经验分享之(一)引言

    一 开篇激励 蓝桥杯单片机组真的是非常容易拿奖的 尤其是省赛 水军特别多 结合我以及我的师兄师姐的参赛经验 基本上编程题全部完成就能保证省一了 至少广东是这情况 至于想拿国一的话得靠平时专业知识的积累了 只靠程序高分是拿不到国一的 第八届我
  • 小程序使用 企业微信客户服务插件(联系我) contactPlugin

    小程序插件接入步骤 1 开发者在小程序管理后台申请使用插件 添加路径 设置 gt 第三方服务 gt 插件管理 gt 添加插件 搜索并添加插件ID wx104a1a20c3f81ec2 无需审核确认 设置 第三方服务 插件管理 添加插件 2
  • 【Linux初阶】信号入门

    hello 各位读者大大们你们好呀 系列专栏 Linux初阶 本篇内容 Linux信号的基本概念 生活信号 技术信号 信号生命周期 信号的保存位置和发送本质 信号的产生 四种方式 一个系统调用接口 作者简介 计算机海洋的新进船长一枚 请多多
  • vue自定义指令-加载指令v-loading和占位图指令v-showimg

    了解自定义指令的钩子函数 bind 每当指令绑定到元素上的时候 就会立刻执行bind这个函数 只调用一次 和css相关的操作 可以放在这个钩子函数中 inserted 元素插入到DOM中的时候 会执行inserted函数 只调用一次 upd
  • 狂神说SpringMVC02:第一个MVC程序

    狂神说SpringMVC系列连载课程 通俗易懂 基于Spring5版本 视频同步 欢迎各位狂粉转发关注学习 未经作者授权 禁止转载 Hello SpringMVC 在上一节中 我们讲解了 什么是SpringMVC以及它的执行原理 狂神说Sp
  • 图片隐写术 - 透明部落通过BMP的RGB通道隐藏PE数据

    透明部落通过BMP的RGB通道隐藏PE数据 报告和样本 Transparent Tribe APT expands its Windows malware arsenal https blog talosintelligence com 2
  • HASHGRAPH 共识算法详解

    英文版地址 http www swirlds com downloads SWIRLDS TR 2016 02 pdf 摘要 本文通过hashgraph上的一系列例子来说明Swirld hashgraph共识算法 通过结合图形来解释算法详细
  • BP神经网络实例(气温预测)及代码分析(python+tensorflow实现)

    https blog csdn net MrMaurice article details 90031937
  • 一个三本负基础学渣是怎么入行前端的?

    学渣简历 院校 上海杉达学院 上海第一第二的本科 当然是倒数 三本 专业 计算机科学与技术 根本不教前端 毕业时间 2017年 大学学到的知识 如何逃课不被点名 为什么选择计算机科学与技术专业 是喜欢男生吗 纯属巧合 我心仪的专业是护士专业
  • 增量集成测试和非增量集成测试

    增量集成测试 集成是逐步实现的 即逐次将未曾集成测试的模块和已经集成测试的模块 或 子系统 结合成程序包 再将这些模块集成为较大系统 在集成的过程中边连接边测试 以发现连接过程中产生的问题 分为 自顶向下增量式测试 自底向上增量式测试 混合
  • java 判断文件夹是否存在 没有则创建_java中实现判断文件是否存在,不存在则创建...

    一 判断文件是否存在 不存在则创建File file new File d test txt if file exists try file createNewFile catch IOException e e printStackTra
  • qt中常用lambda表达式

    qt中lambda表达式 什么是lambda 个人理解 没有函数名的函数 qt中使用基础 备注 都是在qt5中做的使用 我的qt版本是qt5 11 3 pro文件中 config c 11 常见的lambda表达式使用 延时执行操作 举例
  • LeetCode_Array_300. Longest Increasing Subsequence 最长递增子序列【动态规划】【Java】【中等】

    目录 一 题目描述 英文描述 中文描述 示例与说明 二 解题思路 三 AC代码 Java 四 解题过程 第一搏 第二搏 一 题目描述 英文描述 Given an integer array nums return the length of
  • 1-1. C++基础篇

    目录 一 第一个程序 二 注释 1 单行注释 三 变量的意义及定义方法 1 变量的意义 2 变量的定义 四 常量 1 宏常量 2 const修饰的变量构成的常量 五 关键字 六 标识符命名规则 1 标识符命名时不可使用关键字 2 标识符由字
  • 解决文件嵌套太深无法删除问题。

    在搭建前端构建工具gulp时 存在一个文件夹node modules怎么删都删不掉 一 首先可以用del以及rd 百度经验上原文开始 如果你要删除的整个文件夹以及文件夹里面的所有内容的话rd s q 盘符 某个文件夹 这样整个文件夹所有的文
  • DOTA 数据集:2806 张遥感图像,近 19 万个标注实例

    By 超神经 内容提要 DOTA 数据集是用于航拍图像中的目标检测的大型图像数据集 它可用于发现和评估航拍图像中的物体 无论从数量还是质量上来说 在同类型数据集中都具有很大优势 关键词 航拍图像 遥感数据集 大规模遥感图像数据集 挑战 CV
  • gdb调试动态库

    Happy Niu Year step1 编译一个linux动态库 头文件get h ifndef get H define get H int get int set int a endif 实现文件get cpp include