gdb调试

原创

gdb 调试解决-带参数程序-条件断点-core文件开启调试-watch监视内存-gdb多线程调试

gdb set args 和 show args命令 调试带参数程序
gdb如何调试core文件?core 文件是什么?
getopt 函数介绍

让被GDB调试的程序接收信号
gdb 条件断点
gdb 多线程下禁止切换
gdb 调试多进程
gdb 查找某一个文件指定行/或断某行/函数

gdb set args 和 show args命令 调试带参数程序

[root@(none) ~]# gdb main
GNU gdb Red Hat Linux (6.6-8.fc7rh)
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License,and you are
welcome to change it and/or distribute copies of it under certainconditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type"show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu"...
Using host libthread_db library "/lib/libthread_db.so.1".
(gdb) set args a b c
(gdb) r

     
       
       
       
       
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

int getopt(int argc,char * const argv[ ],const char * optstring);

前两个参数大家不会陌生,没错,就是老大main函数的两个参数!老大传进来的参数自然要有人接着!

第三个参数是个字符串,看名字,我们可以叫他选项字符串(后面会说明)

返回值为int类型,我们都知道char类型是可以转换成int类型的,每个字符都有他所对应的整型值,其实这个返回值返回的就是一个字符,什么字符呢,叫选项字符(姑且这么叫吧,后面会进一步说明)
链接:https://www.cnblogs.com/qingergege/p/5914218.html

gdb如何调试core文件?core 文件是什么?
core文件是在程序奔溃的时候来定位原因的。

ulimit -a 查看是否开启,默认是没有开启core文件产生。
0 表示未开启
gdb调试_第1张图片unlimited 表示不限制
ulimut -c unlimited 命令设置

core.PID 表示进程id 某一个server 崩溃后就会产生一个这样的文件。
在这里插入图片描述
gdb chatserver core.28252
gdb调试_第2张图片gdb调试_第3张图片就这样成功定位到原因,“配置文件中没有设置logdir”

gdb 条件断点
分为:普通断点,条件断点,硬件断点
普通断点

	break  10 if i == 50

     
       
       
       
       
  • 1

硬件断点
watch 命令 监视一个变量或者一段内存

int i;
int buf[111];
watch i; watch buf;

     
       
       
       
       
  • 1
  • 2
  • 3

display 命令
监视变量或内存地址

让被GDB调试的程序接收信号


     
       
       
       
       

    gdb 多线程下禁止切换

    void run()
    {
    	代码1
    	代码2
    	。。。
    }  
    
         
           
           
           
           
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    假设现在4个线程 A B C D 执行run每次都根据cpu时间片进行切换,而且还是随机的我们在调试过程中非常的麻烦,但是也并不是没有办法

    	set scheduler-locking on
    	set scheduler-locking off	
    
         
           
           
           
           
    • 1
    • 2

    gdb 调试多进程

    当fork后使用 gdb attach到子进程上去;
    

    show follow-fork mode
    set follow-fork child 继续调试子进程 , 默认情况下不写child 调试parent父进程;
    show follow-fork mode
    follow-fork 查看当前值

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    gdb 查找某一个文件指定行/或断某行/函数

    (gdb) break [< file-name>:]< func-name>
    (gdb) break [< file-name>:]< line-num>

    (gdb) list xxfile:100
    (gdb) b xxfile:100

    (gdb) break [< file-name>:]< func-name>
    (gdb) break [< file-name>:]< line-num>




    上面讲了gdb 的使用,用的比较多的是一些常用命令
    next ,run ,stop , info , bt(查看堆栈),breakpoint
    用的比较多的操作是查看堆栈,和断点,条件断点
    这core也是最新发现的,但是非常有用当程序奔溃了可以通过core 文件进行分析,好气现在才知道;
    再是非常重要的多线程调试技巧,特别是遇到多线程的时候很多同学是没有办法下手的,多线程调试结合条件断点使用,简直就是仗剑走天涯。

                                    
    0 个人打赏
    文章最后发布于: 2019-04-13 23:05:51
            
    展开阅读全文

    gdb 多进程,多线程调试

    04-07 阅读数 379

    多进程调试多线程调试gdb 博文 来自: harryhare的专栏

    linux c++ gdb 如何调试参数程序

    10-24 阅读数 77

    可执行文件名为test1.adb./test2.showargs3.setargs-ccalib-bbest4.show args 博文 来自: chengde6896383的专栏

    gdb 调试

    10-17 阅读数 133

    1)gdb编译命令  gcc-gbase64.c-obase642)进入调试  gdbbase643)设置断点  break11(11为代码行数)4)查看代码 list5)开始运行 run(或者r)6... 博文 来自: haly321的博客

    计算机网络协议——通信协议综述

    09-18 阅读数 2万+

    通信协议综述概述一、为什么学习网络协议1.1常见的网络协议二、网络分层的真正含义2.1为什么网络要分层?2.2浏览点击请求过程2.3揭秘层与层之间的关系三、ifconfig命令行的由来3.1ip地址3... 博文 来自: ghw15221836342的博客

    知乎上 40 个有趣回复,很精辟很提神

    09-07 阅读数 3万+

    点击蓝色“五分钟学算法”关注我哟加个“星标”,天天中午12:15,一起学算法作者|佚名来源|网络整理,版权归原作者所有,侵删。1交朋友的标准是什么?-Ques...... 博文 来自: 程序员吴师兄的博客

    从入门到精通,Java学习路线导航

    09-09 阅读数 3万+

    引言最近也有很多人来向我"请教",他们大都是一些刚入门的新手,还不了解这个行业,也不知道从何学起,开始的时候非常迷茫,实在是每天回复很多人也很麻烦,所以在这里统一作个回复吧。Java学习路线当然,这里... 博文 来自: ~wangweijun的博客

    我花了一夜用数据结构给女朋友写个H5走迷宫游戏

    09-21 阅读数 1万+

    起因又到深夜了,我按照以往在csdn和公众号写着数据结构!这占用了我大量的时间!我的超越妹妹严重缺乏陪伴而怨气满满!而女朋友时常埋怨,认为数据结构这么抽象难懂的东西没啥作用,常会问道:天天写这玩意,有... 博文 来自: bigsai

    通过玩游戏从计算机小白到黑客的进阶之路!

    09-12 阅读数 1736

    “如何从一个计算机小白入门网络安全成为黑客?”或“成为一个黑客该如何学习?”“如何学习网络安全?”等…我也在看到很多好的推荐,从入门到进阶需要看的书籍,以及一些概念、技巧和实战的网址。(这里不得不提知... 博文 来自: 知道创宇KCSC

    你可能感兴趣的:(linux,gdb)