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
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 表示未开启
unlimited 表示不限制
ulimut -c unlimited 命令设置
core.PID 表示进程id 某一个server 崩溃后就会产生一个这样的文件。
gdb chatserver core.28252
就这样成功定位到原因,“配置文件中没有设置logdir”
gdb 条件断点
分为:普通断点,条件断点,硬件断点
普通断点
break 10 if i == 50
硬件断点
watch 命令 监视一个变量或者一段内存
int i;
int buf[111];
watch i; watch buf;
display 命令
监视变量或内存地址
让被GDB调试的程序接收信号
gdb 多线程下禁止切换
void run()
{
代码1
代码2
。。。
}
假设现在4个线程 A B C D 执行run每次都根据cpu时间片进行切换,而且还是随机的我们在调试过程中非常的麻烦,但是也并不是没有办法
set scheduler-locking on
set scheduler-locking off
gdb 调试多进程
当fork后使用 gdb attach到子进程上去;
show follow-fork mode
set follow-fork child 继续调试子进程 , 默认情况下不写child 调试parent父进程;
show follow-fork mode
follow-fork 查看当前值
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 文件进行分析,好气现在才知道;
再是非常重要的多线程调试技巧,特别是遇到多线程的时候很多同学是没有办法下手的,多线程调试结合条件断点使用,简直就是仗剑走天涯。