GDB的一些技巧】的更多相关文章

gdb命令调试技巧 一.信息显示1.显示gdb版本 (gdb) show version2.显示gdb版权 (gdb) show version or show warranty3.启动时不显示提示信息gdb -q exe 或者.bashrc 添加alias gdb="gdb -q",重启shell4.退出时不显示提示信息(gdb) set confirm off5.输出信息多时不会暂停输出(gdb)set pagination off 二.函数1.列出函数的名字(gdb) info…
查看栈信息 bt info stack 查看源程序 list ctrl + x + a 分屏调试,上半部分显示代码,下半部分显示调试信息. 查看内存 p  xxxptr@n  查看xxxptr 指针内容 开始连续n个字节的内存 可以使用examine命令(简写为x)来查看内存地址中的值.x命令的语法如下所示: x /<n/f/u> <addr> n 表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容. f 表示显示的格式,如果是字符串,则用s,如果是数字,则可以用i. u…
本文说明了,在ffmpeg二次开发或调用库的过程,如何借助于ffmpeg源码进行调试. 注:ffmpeg版本是4.0. 1. 编写代码 编写将pcm数据转换为mp2的代码 pcm_to_mp2.c #include <libavformat/avformat.h> #include <libavcodec/avcodec.h> #include <libswresample/swresample.h> #include <stdio.h> #include…
本节课的核心内容: 多线程下禁止线程切换 条件断点 使用 GDB 调试多进程程序 多线程下禁止线程切换 假设现在有 5 个线程,除了主线程,工作线程都是下面这样的一个函数: void thread_proc(void* arg) { //代码行1 //代码行2 //代码行3 //代码行4 //代码行5 //代码行6 //代码行7 //代码行8 //代码行9 //代码行10 //代码行11 //代码行12 //代码行13 //代码行14 //代码行15 } 为了能说清楚这个问题,我们把四个工作线程…
本节课的核心内容: 将 print 打印结果显示完整 让被 GDB 调试的程序接收信号 函数明明存在,添加断点时却无效 将 print 打印结果显示完整 当使用 print 命令打印一个字符串或者字符数组时,如果该字符串太长,print 命令默认显示不全的,我们可以通过在 GDB 中输入 set print element 0 命令设置一下,这样再次使用 print 命令就能完整地显示该变量的所有字符串了. void ChatSession::OnGetFriendListResponse(co…
1.进入gdb,需要源码,然后gdb+可执行文件,如果要看代码一起的就gdb+可执行文件+tui 2.设置参数 set args +参数 3.设置断点,可以b +行数或者b+函数名字 4.r就是一直跑直到跑到有个断点的位置,还是 5.n执行下一行,s就可以进入函数 6.p + 变量可以看到变量的值 7.u + 行数可以跳到相应的行 8.info thread表示那个线程有*就代表现在在那个行,多线程就thread +数字就可以跳对应的线程(这个可以锁定不会跑到其他线程除非崩了) 9. fs cm…
很全的关于 GDB 调试的指导: GDB中应该知道的几个调试方法 用 GDB 调试程序 100个gdb调试小技巧 CGDB中文手册 Beej's Quick Guide to GDB…
写 C++的同学想必有太多和内存打交道的血泪经验了,常常被 C++的内存问题搅的焦头烂额.(写 core 的经验了)有很多同学一见到 core 就两眼一抹黑,不知所措了.笔者 入"坑"C++之后,在调试 C++代码的过程之中,学习了不少调试代码内存的工具.希望借这个机会来介绍一下笔者常用的工具,GDB,Valgrind等等,相信大家通过好好运用这些工具,能更好的驯服内存这匹"野马". 1.利用 GDB 调试 CoreDump CoreDump时一个二进制的文件,进程…
今天get到一个在linux下gdb调试程序的技巧和大家分享一下!平时我们利用gcc进行编程,进行程序调试时,观察程序的跳转等不是这么直观.都是入下的界面! 但是如果我们在编译连接时上加了-g命令生成的可执行文件,用gdb -tui -q p2psrv(要debug的命令),就可以进入一个类似的可视化的调试界面. 之后相信一些基本的gdb操作大家都应该清楚. backtrace:查看各级函数调用及参数 finish:连续运行到当前函数返回为止,然后停下来等待命令 frame(或f) 帧编号 :选…
本科核心内容: info和thread命令 next.step.util.finish和return命令 5.1info和thread命令 在前面使用info break命令查看当前断点时介绍过,info命令是一个复合指令,还可以用来查看当前进程的所有线程运行情况.下面以redis-server进程为例来演示一下,使用delete命令删除所有断点,然后使用run命令重启一下redis-server,等程序正常启动后,我们按快捷键Ctrl+C中断程序,然后使用info thread命令来查看当前进…
本课的核心内容: info 和 thread 命令 next.step.util.finish.return 和 jump 命令 info 和 thread 命令 在前面使用 info break 命令查看当前断点时介绍过,info 命令是一个复合指令,还可以用来查看当前进程的所有线程运行情况.下面以 redis-server 进程为例来演示一下,使用 delete 命令删掉所有断点,然后使用 run 命令重启一下 redis-server,等程序正常启动后,我们按快捷键 Ctrl+C 中断程序…
开篇词:Linux C/C++ 开发人员要熟练掌握 GDB 调试 大家好,我是范蠡,目前在某知名互联网旅游公司基础框架业务部技术专家组任开发经理一职. 本系列课程的主题是 Linux 后台开发的 C/C++ 调试,通俗地说就是 GDB 调试.GDB(GNU Debugger)是类 Unix(如 Linux)操作系统下的一款开源的 C/C++ 程序调试器.最初是在 1988 年由理查德 · 马修 · 斯托曼(Richard Stallman)所撰写,之后以 GNU 通用公共许可证(GNU Gene…
使用python对csdn的博主文章进行爬取,期间又遇到了新的问题和旧的已经遇到过的问题.首先做一个笔记,免得以后遇到同样的问题时还得浪费时间和经历. 刚开始目的没那么明确,主要在于熟悉相关的规则及流程.采用的方式时正则表达式 + BeautifulSoup, 个人感觉正则表达时的好处时方便对数据进行过滤和筛选:BeautifulSoup则时专门用来处理xml文件的,它可以很方便的提取xml文件不同节点信息(包括节点的属性信息和参数值). # author : sunzd # date : 20…
一篇不错的帖子,讲的是gdb中的信号(signal)相关调试技巧 转自Magic C++论坛  http://www.magicunix.com/index_ch.html  http://www.magicunix.com/cgi-bin1/forum_cn/ultimatebb.cgi?ubb=get_topic&f=1&t=000060#000003 引用:  --------------------------------------------------------------…
使用gdb调试运行时的程序小技巧 标签: 未分类 gdb pstack | 发表时间:2012-10-15 04:32 | 作者:士豪 分享到: 出处:http://rdc.taobao.com/blog/cs 原创文章,欢迎转载.转载请注明:转载自淘宝核心系统团队博客,谢谢! 原文链接地址: 使用gdb调试运行时的程序小技巧 下面介绍我调试时经常遇到的三种问题,如果大家也有类似的问题交流一下解决方法: 情景1:在不中止程序服务的情况下,怎么调试正在运行时的程序 情景2:需要同时看几个变量的值或…
https://blog.atime.me/note/gdb-tricks.html 整理常用的gdb技巧. 常用命令 常用的gdb命令... 启动gdb 直接运行 gdb --args prog arg1 arg2 运行gdb后使用run命令 gdb prog run arg1 arg2 attach到已运行的程序 gdb --pid ${PID_OF_PROG} ptype ptype用于显示Symbol的类型,示例源码为: struct ABC { int val; } int main(…
目录 一 写在开头 1.1 本文内容 二 学习资料 三 常用命令 四 调试技巧 注:原创不易,转载请务必注明原作者和出处,感谢支持! 一 写在开头 1.1 本文内容 总结GDB调试的一些常用命令和调试技巧.不定期更新. 二 学习资料 The GNU Project Debugger <软件调试的艺术> (美)马特洛夫,(美)萨尔兹曼 三 常用命令 GDB的命令有很多,但只需要掌握下面常用的几个便可快速上手. 简写 全称 备注 l list 显示指定行号或者指定函数附近的源代码 b break…
陈皓:用GDB调试程序 GDB概述———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC.BCB的图形化调试器更强大的功能.所谓“寸有所长,尺有所短”就是这个道理. 一般来说,GDB主要帮忙你完成下面四个方面的功能: 1.启动你的程序,可以按照你的自定义的要求随心所欲的运行程序.    2.可让被调试的程序在你所指定的调置的断点处停住.(断点…
GDB分析ELF文件常用的调试技巧 gdb常用命令 首先是gbd+文件名 静态调试 ,gdb attach +文件名 动态调试 为了方便查看堆栈和寄存器 最好是安装peda插件 安装 可以通过pip直接安装,也可以从github上下载安装 $ pip install peda $ git clone https://github.com/longld/peda.git ~/peda $ echo "source ~/peda/peda.py" >> ~/.gdbinit 命…
<软件调试的艺术>学习笔记——GDB使用技巧摘要 <软件调试的艺术>,因为名是The Art of Debugging with GDB, DDD, and Eclipse. 作者是美国的Norman Matloff和Peter Jay Salzman,中文版由张云翻译.是人邮出版社图灵程序设计丛书初版.这里称为"艺术",个人觉得有点过了,但是其中关于gdb以及在gdb基础之上集成的DDD和Eclipse调试技巧的整理确实是做的很好,对于Linux/开源社区下的…
1. 使用Xcode分析代码,分析分为静态分析及动态分析 静态分析:(Xcode-Product-Analyze)  检测代码是否有潜在的内存泄露  编译器认为不太合适的代码 运行结果: 若程序有未使用的变量,或编译器写法不合理,则分析结果会给出相应提示: 动态分析:(Xcode-Product-Profile) 动态分析的工具主要有两种:  Allocations: 检测程序在运行过程中内存变化  Leaks: 检测程序是否有内存泄露 Allocations: 可以通过操作App分析当…
现实数组: 比如说要显示a[10]中全部的内容用 p a显示的是地址,用p *a显示的是第一个元素显示全部或某一个:p (int [10])*a或者p *a@10 如果你使用 p *a@3 或 p *&a[0]@3 将打印从数组中从a[0]开始的3个值.如果数组元素很多比如1000个,而你想打印a[600]开始的7个,可以使用 p *&a[600]@7. 8 gdb tricks you should know By Ksplice Post Importer on Jan 24, 201…
1. 查看内存分布 (gdb) info proc mappings 2. 对于类的调试,先通过行号来设断点, 比如:(gdb) b TcpConnection.cc:63 3. 打印数组的内容 (gdb) p *array@len 4. 查看全局变量的地址,比如info line <variable> 5. 使用十六进制逐个打印内存 x/10xb <address>,其中第二个x是16进制,b是字节 6. 通过指针打印对象 p *(<class> *)<addr…
一般gdb运行的时候,我们仅仅能输入一个命令. 如: (gdb) c (gdb) bt 假设想运行多个命令怎么办? 能否像bash那样, 使用; 如 ls; ls 结论是不行. 但能够通过gdb 内建函数的的方式来实现: (gdb) def cbt >c >bt 10 >end (gdb) 也能够追加到 $HOME/.gdbinit下, 每次启动gdb后会自己主动载入.…
假设线上有一段php脚本,突然在某天出问题了,不处理但是进程没有退出.这种情况可能是异常休眠或者是有段死循环代码,但是我们怎么定位呢,我们这个时候最想知道的应该是这个脚本在此刻在做什么吧.这个是gdb+zbacktrace就有用了 首先随便写一个测试脚本test.php,里面就写一个sleep函数,换成死循环也可以. <?php function Mecho($i){ echo $i.PHP_EOL; } $i = 20; while($i>0){ if($i%2==0){ Mecho($i)…
最近使用GDB比较多,发现除了最常用的run.break.continue.next等命令的基本用法外,还有一些非常有用的命令和用法,能让你更加得心应手地使用GDB,在这里做了一下简单的总结. 1. run 当GDB的程序需要带参数运行时,除了使用set args外,还可以直接在run(r)后面带上参数,如下面两种方式是等价的: 2. set follow-fork-mode 有时候会发现GDB无法跟踪到设置的断点,原因可能是需要调试的进程是daemon进程或者fork的子进程,而GDB默认是只…
找到的一个有参考价值的关于GDB调试的站点:https://gitlore.com/subject/15…
一.引言 在Linux下开发,肯定少不了与gdb打交道,而gdb的命令又非常多,有些是不常用的但是特殊情况下却是必须的,因此记录在此,以便翻阅 二.基本命令 前面是命令全名,在不混淆的情况下,可以简写为后面的单个字符 list l : 列出源代码run r : 运行程序step s : 单步运行(进入函数内部)next n : 单步运行(跳过函数执行)continue c : 继续执行print p : 打印变量值 p/x y:以16进制显示y的值,c表示字符,s表示字符创,f表示浮点数 pty…
调试的艺术——Debug技巧总结 (本文从写好的wiki里粘出来的,格式稍乱不影响阅读) 用Q+编号代表问题,A+编号代表答案.用这种方式组织.如无特别说明,这些技巧都是针对Visual Studio 2003的 汇编级的问题我作为一个逻辑程序只能说略知皮毛,内容仅为抛砖引玉,说法不严谨之处希望能毫不客气的指出,以便改正.但大部分信息都是有经验或参考资料确认的,有问题可以与我探讨. Q1:Release版本不能调试吗? A1: Release版本.Debug版本的区别,据我目前所知有3处:编译是…
参考博客:  https://blog.csdn.net/niyaozuozuihao/article/details/91802994 1.运行命令run:简记为 r ,其作用是运行程序,当遇到断点后,程序会在断点处停止运行,等待用户输入下一步的命令.continue (简写c ):继续执行,到下一个断点处(或运行结束)next:(简写 n),单步跟踪程序,当遇到函数调用时,也不进入此函数体:此命令同 step 的主要区别是,step 遇到用户自定义的函数,将步进到函数中去运行,而 next…