[2020.5.30]gdb常用总结

2023-10-27

前提:使用的是带debug信息的动态库

1 info

(1)types 查看该类型符号是否存在,若存在显示该类型符号相关信息

info types SDL_WindowData
info types ucontext_t

(2)functions 打印函数的相关信息

info functions X11_DispatchFocusIn

(3)sharedlibrary 打印所有动态库

info sharedlibrary 

set solib-search-path /opt/apps/xxx/lib

(4)info address 函数名

(5)info symbol 地址

(6)info register

i r

2 print

(1)p struct table键不能识别问题

p SDL_Window table键

有SDL_WindowData,SDL_WindowEvent

p struct SDL_Window table键

无SDL_WindowData,有SDL_WindowEvent

通过对比info types SDL_WindowData和info types SDL_WindowEvent:

原因是p struct识别不出SDL_WindowData是个结构体!!!

typedef struct{

...

}SDL_WindowData;

修改为如下即可table识别struct

typedef struct SDL_WindowData{

...

};

typedef struct SDL_WindowData SDL_WindowData;

或者直接p *(SDL_WindowData*) 0xffff12343222

(2)打印static变量

static SDL_VideoDevice * _this;

p (struct SDL_VideoDevice *) _this;

p *(struct SDL_VideoDevice *) _this;

(3)打印进程上下文

p *(struct ucontext_t *)_ctx

(4)以16进制打印内存值,默认会打印4个字节

p/x 281473230680868

3 break

(1)断点函数

b X11_DispatchFocusIn

(2)断点文件

b SDL_x11events.c:388               

4 disassemble 

反汇编

disassemble XSetICFocus

或disassemble address

5 x

(1)以16进制打印内存地址后的100个字节

x/100x 0xffff1861b020

(2)打印指定偏移的内存值

x 0xffff9c88c000+296

6 只给thead_num这个线程的xx函数打断点

tid:281472160947648线程的X11_ShowCursor函数

p/x 281472160947648

0xffff582addc0

info thread

b X11_ShowCursor thread 23

c

7 生成coredump,gdb coredump

(1)root用户下

echo /tmp/core_%e_%p > /proc/sys/kernel/core_pattern

(2)普通用户下

ulimit -c unlimited         

ulimit -c                                   

(3)cd /tmp            

gdb 可执行文件 core_xxx_xxx

注意:在出现问题的环境上gdb,不要更新so,不要破坏环境

(4)bt看调用栈

8 gdb -p

gdb -p pid

b SDL_Destroy

c

bt          

9 gdb加断点后自动打印bt栈

>commands

>bt

>continue

>end

10 watch

(1)watch expr:

gdb在expr被程序写时停止

如果有一个指针p指向一块内存,则:

watch p:监控p指针变量本身,如果p中存储的内存地址发生变化,调试程序停住;

watch *p:监控p所指向的内存(*p本身就是一个地址数据),如果这块内存发生变化

,调试程序停住;

(2)rwatch expr

gdb在expr被程序读时停止

(3)awatch expr

gdb在expr被程序读和写时停止

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

[2020.5.30]gdb常用总结 的相关文章

  • 如何在 gdb 中附加进程

    我有一个简单的 C 程序 它分叉一个进程 然后运行一个可执行文件 我想将子进程附加到 gdb 我在控制台中运行主程序并打开另一个控制台来查找子进程的 pid 然后使用以下命令启动 gdb gdb attach 12271 where 122
  • 使用 gdb 在指定的可执行文件之外单步执行汇编代码会导致错误“无法找到当前函数的边界”

    我在 gdb 的目标可执行文件之外 甚至没有与该目标对应的堆栈 无论如何 我想单步执行 以便我可以验证汇编代码中发生了什么 因为我不是 x86 汇编方面的专家 不幸的是 gdb 拒绝进行这种简单的汇编级调试 它允许我设置并停止在适当的断点上
  • 如何让 gdb 保存命令历史记录?

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

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

    我想在函数参数大于某个值时设置断点 下面的虚拟代码 int main void uint64 t num 123456 uint64 t x 847534 uint64 t other num x x num other stuff her
  • dprintf 与 break + 命令 + continue 之间有什么区别?

    例如 dprintf main hello n run 生成与以下内容相同的输出 break main commands silent printf hello n continue end run 使用是否有显着的优势dprintf ov
  • 如何在 gdb 中禁用“键入 继续,或 q 退出”?

    我想要自动化gdb 并且等待用户输入是不可取的 如何禁用消息 Type
  • GDB/bin/bash 无法在 Eclipse CDT 中执行应用程序?

    在 Mac OS X Mojave 上使用 Eclipse CDT 运行 GDB 时遇到困难 当我尝试调试项目时 GDB 表现得很混乱 我能够调试几次 但随后它在下一个调试会话开始时开始停止 并显示消息 配置 GDB 可执行文件是 User
  • 代码::块 - 警告:GDB:无法设置控制终端:不允许操作

    我已经通过官方存储库在 Ubuntu 14 04 中安装了 Code Blocks 13 12 当我编译时 一切正常 但是当我调试时 shell 中会显示以下消息 警告 GDB 无法设置控制终端 操作不正确 允许的 程序执行到断点 但当我执
  • 为什么 GDB 启动一个新的 shell 以及如何禁用此行为?

    我正在解决一个问题 即从 GDB 启动应用程序会导致符号查找错误 但从 shell 启动它却可以 事实证明 每当你从 GDB 中启动一个程序时 它都会启动一个新的 shell 从而覆盖我在启动 GDB 之前设置的所有环境变量 例如LD LI
  • 如何将整个 GDB 会话转储到文件中,包括我输入的命令及其输出?

    在 bash 中 我可以使用script命令 它将 shell 上显示的所有内容转储到文件中 包括 键入的命令 PS1 line 命令的 stdout 和 stderr gdb 中的等效项是什么 我试着跑shell script从 GDB
  • 没有可用的符号表信息

    我正在测试第三方的库 它崩溃了 当我想查看崩溃的原因时 我的 gdb 告诉我没有可用的调试符号 Program received signal SIGSEGV Segmentation fault Switching to Thread 0
  • 在 C++ 代码 gdb 中回溯指针

    我在运行 C 应用程序时遇到段错误 在 gdb 中 它显示我的一个指针位置已损坏 但我在应用程序期间创建了 10 万个这样的对象指针 我怎样才能看到导致崩溃的一个 我可以在 bt 命令中执行任何操作来查看该指针的生命周期吗 谢谢 鲁奇 据我
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • gdb 声称它不知道如何运行

    我在 Mac Pro 上的 Mac OS X 10 6 6 上使用 Xcode 3 2 3 来构建 GrowlTunes 的修订版 5fd480ef577f咆哮开发存储库 http growl info hg growl developme
  • GDB - 将地址映射到源代码中的行和列

    gcc 和 clang 都有选项 gcolumn info 描述如下 将位置列信息发出到 DWARF 调试信息中 而不仅仅是文件和行 我已经使用此选项编译了我的二进制文件 现在我有一些指令的地址 想将其翻译回源文件 行号和列 有没有办法在g
  • gdb:如何禁用特定的漂亮打印机

    如何在 gdb 中禁用特定的漂亮打印机 例如 禁用 C 11 std unique ptr 打印机 gdb 帮助或文档没有提供真实的或工作的示例 这对我有用 gdb info pretty printer global pretty pri
  • 使用 -ffile-prefix-map 会中断调试

    在 DAYJOB 我正在尝试实现可重复的构建 以使调试已发布的软件变得更容易 我们的构建服务器上不再有完整的调试版本 使用来自可重现的构建 org https reproducible builds org 使用 ffile prefix
  • 使用 eclipse 调试 OpenJDK 源代码

    在我的项目中 我想使用 eclipse 调试 OpenJDK 版本 8 的 C C 源代码 为此 我做了以下工作 编译了 OpenJDK8 with debug level slowdebug使用这个readme http hg openj
  • 从 gdb 设置 std::string 变量值?

    是否有可能 当调试器在断点处停止时 修改 std string 变量的值 而不需要采取诸如调整当前缓冲区的内存映像之类的黑客手段 例如类似于 set var mystring hello world 试试这个 经过测试并且对我有用 call

随机推荐

  • vue-admin-template中实现点击侧边栏刷新页面

    一 layout components Sidebar Link vue
  • 第九届蓝桥杯省赛C++A组 付账问题

    标题 付账问题 题目描述 几个人一起出去吃饭是常有的事 但在结帐的时候 常常会出现一些争执 现在有 n 个人出去吃饭 他们总共消费了 S 元 其中第 i 个人带了 ai 元 幸运的是 所有人带的钱的总数是足够付账的 但现在问题来了 每个人分
  • OracleDBA面试题

    1 OracleDBA面试题之一解释冷备份和热备份的不同点以及各自的优点 解答 热备份针对归档模式的数据库 在数据库仍旧处于工作状态时进行备份 而冷备份指在数据库关闭后 进行备份 适用于所有模式的数据库 热备份的优点在于当备份时 数据库仍旧
  • 2022第十三届蓝桥杯国赛真题javaB组 (我自己做的)

    A 重合次数 2023 5 1 问题描述 在同一天中 从上午 6 点 13 分 22 秒到下午 14 点 36 分 20 秒 钟表上的 分针和秒针一共重合了多少次 注意时针 分针 秒针都围绕中心敳匀速运动 答案提交 这是一道结果填空的题 你
  • Android_App多语言切换

    前段时间公司 App 需要实现多语言切换功能 接到任务后先 Google 了下 发现搜到的方法都比较老旧 很多都莫名其妙 比如什么 API 欺骗 反射 手动转换语系 感觉不应该这么复杂地实现 也可能是当时的环境下实现确实比较麻烦 所以花了点
  • flink学习day04:对Event Time 与 Watermark的理解

    带大家零基础入门flink flink学习day01 Flink基础入门 含案例 flink学习day02 datasource transforma和sink flink学习day03 flink datastream 开发 流式计算中时
  • 【操作系统】常见面试题集锦(全)

    目录 前言 1 进程 线程的区别和联系 2 有了进程为什么还要线程 3 进程状态的切换 4 并发和并行 5 外中断和异常的区别 6 进程调度算法了解多少 7 动态分区分配算法的了解 8 Linux下进程间通信方式 9 几种典型的锁 10 地
  • Python3中pass语句介绍

    python3中的pass语句是一个空语句 什么都不做 执行它时什么也没有发生 是一个空操作 pass语句通常用作占位符 place holder 即当用户不知道要编写什么代码时 用户只需在那行上放置pass 在语法上需要有条语句但是确不希
  • HTML5-4-表单

    文章目录 表单属性 表单标签 输入元素 文本域 Text Fields 密码字段 单选按钮 Radio Buttons 复选框 Checkboxes 按钮 button 提交按钮 Submit label标签 文本框 textarea 下拉
  • 求解1+2+3+...+n,要求不能使用乘除法、while、for、if 、else、switch、case等关键字

    方法一 利用递归以及 的短路原理 int Sum int num int sum num Sum num 1 sum 递归跳出条件 当num为假时 无需判断后序语句 返回sum n return sum num int main int n
  • c#----类和对象

    1 1 类和对象 类 class 是最基础的c 类型 类是一个数据结构 将状态 字段 和操作 方法和其它函数成员 组合在一个单元中 类为动态创建的类实例 instance 提供了定义 实例也称对象 object 类支持继承 inherita
  • mybatis的关联查询(一对一和一对多的实现)

    1 一对一的关联查询 1 1 准备查询的sql语句 用户与订单 关联查询 select o id o name o address u name u address from orders o left join user u on o u
  • Prometheus的函数和计算公式

    Prometheus强大的地方就在于可以它可以使用的很多计算公式去获取自己需要的数据 这里所涉及到的计算公式 也是我们普遍认为的难点所在 在Zabbix中想要获取CPU使用率是一件非常简单的事情 但是在Prometheus中却需要通过计算公
  • 如何理解算法时间复杂度的表示法O(n²)、O(n)、O(1)、O(nlogn)等?

    时间复杂度这个东西 其实更准确点说应该是描述一个算法在问题规模不断增大时对应的时间增长曲线 所以 这些增长数量级并不是一个准确的性能评价 可以理解为一个近似值 时间的增长近似于logN NlogN的曲线 先从O 1 来说 理论上哈希表就是O
  • ElementPlus主题色修改

    一般情况下我们使用elementplus的时候 肯定需要更改他的主题颜色 我们系统中的主题颜色大多数的时候适合他的主题颜色不一样的 那么如何更改呢 我是在assets styles element index scss下 forward e
  • linux系统关于 unrecognized service

    能ping 通服务器 但远程无法连接 我怀疑远程服务没开启 就输入了 service sshd start命令 结果显示 ssh unrecognized service 我输入查看命令 service ssh status 显示也是 un
  • springboot和vue项目如何上传图片,结合若依框架实现

    一 后台代码 RequestMapping value upload method RequestMethod POST headers content type multipart form data ApiOperation value
  • 【开发工具】iOS真机调试抓包工具Charles安装及使用

    支持原创 更多内容请关注 http www china10s com blog p 271 iOS开发过程中 经常需要用真机来测试和后台的网络数据传输 需要一个趁手的抓包工具 在Windows下用的fidder很好用 但是由于它是在 Net
  • 软连接的建立和删除

    想把A文件夹放在B文件夹下面 ln s A B 想取消软连接 rm rf B A 千万不要写成 rm rf B A 这样会删除A里面的数据
  • [2020.5.30]gdb常用总结

    前提 使用的是带debug信息的动态库 1 info 1 types 查看该类型符号是否存在 若存在显示该类型符号相关信息 info types SDL WindowData info types ucontext t 2 function