信号的处理
程序是和网络相关的,调试期间经常地收到SIGPIPE,导致gdb停下来。看了一下gdb info,解决方法很简单。用handle命令设置一下缺省signal的处理行为就可以了:
handle SIGPIPE nostop
如果连提示信息都不想看见,就可以这样设置:
handle SIGPIPE nostop noprint
就可以了。其他相关信号也可以类似处理。想了解目前的signal状态可以使用info signal察看。
启动配置文件
GDB使用中比较麻烦的事情,就是每次启动,还要手动敲一把命令,特别是断点比较多的情况,这个特便影响,工作效率。查了一下 gdb info,gdb支持自动读取一个启动脚本文件.gdbinit,所以经常输入的启动命令,就都可以写在gdb启动目录的.gdbinit里面。比如
.gdbinit:
file myapp
handle SIGPIPE nostop
break ss.c:100
break ss.c:200
run
GDB和bash类似,也支持source这个命令,执行另外一个脚本文件。所以可以修改一下.gdbinit:
.gdbinit:
file myapp
handle SIGPIPE nostop
source gdb.break
run
gdb.break:
break ss.c:100
break ss.c:200
这样修改的断点配置,只需要编辑gdb.break就可以了。再后来,偶而还是需要单独启动GDB,不想执行自动脚本,于是又改进了一下。首先把.gdbinit命名为gdb.init,然后定义一个shell alias:
$ alias .gdb=”gdb -x gdb.init”
这样如果需要使用自动脚本,就用.gdb命令,否则用gdb进入交互状态的gdb。这样配置以后可以一个简单命令就开始调试,整个效率就能提高不少。
信号(Signals)
信号是一种软中断,是一种处理异步事件的方法。一般来说,操作系统都支持许多信号。尤其是UNIX,比较重要应用程式一般都会处理信号。UNIX定义了许
多信号,比如SIGINT表示中断字符信号,也就是Ctrl+C的信号,SIGBUS表示硬件故障的信号;SIGCHLD表示子进程状态改动信号;
SIGKILL表示终止程式运行的信号,等等。信号量编程是UNIX下非常重要的一种技术。
GDB有能力在你调试程式的时候处理所有一种信号,你能告诉GDB需要处理哪一种信号。你能需求GDB收到你所指定的信号时,马上停住正在运行的程式,以供你进行调试。你能用GDB的handle命令来完成这一功能。
handle
在GDB中定义一个信号处理。信号能以SIG开头或不以
SIG开头,能用定义一个要处理信号的范围(如:SIGIO-SIGKILL,表示处理从SIGIO信号到SIGKILL的信号,其中包括SIGIO,
SIGIOT,SIGKILL三个信号),也能使用关键字all来标明要处理所有的信号。一旦被调试的程式接收到信号,运行程式马上会被GDB停住,以
供调试。其能是以下几种关键字的一个或多个。
nostop
当被调试的程式收到信号时,GDB不会停住程式的运行,但会打出消息告诉你收到这种信号。
stop
当被调试的程式收到信号时,GDB会停住你的程式。
print
当被调试的程式收到信号时,GDB会显示出一条信息。
noprint
当被调试的程式收到信号时,GDB不会告诉你收到信号的信息。
pass
noignore
当被调试的程式收到信号时,GDB不处理信号。这表示,GDB会把这个信号交给被调试程式会处理。
nopass
ignore
当被调试的程式收到信号时,GDB不会让被调试程式来处理这个信号。
info signals
info handle
查看有哪些信号在被GDB检测中。
程序是和网络相关的,调试期间经常地收到SIGPIPE,导致gdb停下来。看了一下gdb info,解决方法很简单。用handle命令设置一下缺省signal的处理行为就可以了:
handle SIGPIPE nostop
如果连提示信息都不想看见,就可以这样设置:
handle SIGPIPE nostop noprint
就可以了。其他相关信号也可以类似处理。想了解目前的signal状态可以使用info signal察看。
启动配置文件
GDB使用中比较麻烦的事情,就是每次启动,还要手动敲一把命令,特别是断点比较多的情况,这个特便影响,工作效率。查了一下 gdb info,gdb支持自动读取一个启动脚本文件.gdbinit,所以经常输入的启动命令,就都可以写在gdb启动目录的.gdbinit里面。比如
.gdbinit:
file myapp
handle SIGPIPE nostop
break ss.c:100
break ss.c:200
run
GDB和bash类似,也支持source这个命令,执行另外一个脚本文件。所以可以修改一下.gdbinit:
.gdbinit:
file myapp
handle SIGPIPE nostop
source gdb.break
run
gdb.break:
break ss.c:100
break ss.c:200
这样修改的断点配置,只需要编辑gdb.break就可以了。再后来,偶而还是需要单独启动GDB,不想执行自动脚本,于是又改进了一下。首先把.gdbinit命名为gdb.init,然后定义一个shell alias:
$ alias .gdb=”gdb -x gdb.init”
这样如果需要使用自动脚本,就用.gdb命令,否则用gdb进入交互状态的gdb。这样配置以后可以一个简单命令就开始调试,整个效率就能提高不少。
信号(Signals)
信号是一种软中断,是一种处理异步事件的方法。一般来说,操作系统都支持许多信号。尤其是UNIX,比较重要应用程式一般都会处理信号。UNIX定义了许
多信号,比如SIGINT表示中断字符信号,也就是Ctrl+C的信号,SIGBUS表示硬件故障的信号;SIGCHLD表示子进程状态改动信号;
SIGKILL表示终止程式运行的信号,等等。信号量编程是UNIX下非常重要的一种技术。
GDB有能力在你调试程式的时候处理所有一种信号,你能告诉GDB需要处理哪一种信号。你能需求GDB收到你所指定的信号时,马上停住正在运行的程式,以供你进行调试。你能用GDB的handle命令来完成这一功能。
handle
在GDB中定义一个信号处理。信号能以SIG开头或不以
SIG开头,能用定义一个要处理信号的范围(如:SIGIO-SIGKILL,表示处理从SIGIO信号到SIGKILL的信号,其中包括SIGIO,
SIGIOT,SIGKILL三个信号),也能使用关键字all来标明要处理所有的信号。一旦被调试的程式接收到信号,运行程式马上会被GDB停住,以
供调试。其能是以下几种关键字的一个或多个。
nostop
当被调试的程式收到信号时,GDB不会停住程式的运行,但会打出消息告诉你收到这种信号。
stop
当被调试的程式收到信号时,GDB会停住你的程式。
当被调试的程式收到信号时,GDB会显示出一条信息。
noprint
当被调试的程式收到信号时,GDB不会告诉你收到信号的信息。
pass
noignore
当被调试的程式收到信号时,GDB不处理信号。这表示,GDB会把这个信号交给被调试程式会处理。
nopass
ignore
当被调试的程式收到信号时,GDB不会让被调试程式来处理这个信号。
info signals
info handle
查看有哪些信号在被GDB检测中。
发表评论
-
crond需要重启么?
2011-06-11 12:20 1224今天一同事说把A机器的/var/spool/cron/admi ... -
信号量基础知识
2011-05-10 18:40 985linux 中信号相关的一个结构体 struct sigact ... -
asprintf
2011-05-08 21:49 2326sprintf() 的整个介面长的样子的是: int ... -
获取用户输入的问题(清除stdin)
2011-05-08 21:37 1907需求: 从终端获取用户输入的用户名和密码(有效 ... -
Linux下的UDP/TCP端口映射(netcat and socat)
2011-05-07 20:42 9665说起来有点土,事到如今 ... -
linux任务管理
2011-05-07 20:32 680disown是bash内部命令,nohup是外部命令 diso ... -
boost multi_index_container
2011-04-27 21:18 1524本章介绍的主题是multi_i ... -
变量相关命令(env,export,set,read, array, declare
2011-04-26 21:38 1001系统的预设参数文件:/ ... -
stl priority_queue
2011-04-26 21:20 602简单的使用示例。 view plaincopy to cli ... -
linux backlog
2011-04-25 15:13 1492在linux中,/proc/sys/net/core/so ... -
linux backlog
2011-04-25 15:13 730在linux中,/proc/sys/net/core/so ... -
stl hash_map
2011-04-23 19:57 749#include <cstdlib> #incl ... -
linux串口登陆
2011-04-23 09:31 1478在这个互连网高速发展的时代, 企业内网络设备的安全和运行稳定也 ... -
linux rename
2011-04-21 09:38 707Linux中rename命令的用法 刚学习linux的时候, ... -
stl heap
2011-04-17 10:01 767make_heap 原型: #include <a ... -
expand and upexpand
2011-04-09 13:33 707expand: NAME expand - co ... -
内核模块相关命令:lsmod,depmod,modprobe
2011-03-28 13:24 1109lsmod 功能:列出内核已载入模块的状态 用法:lsmod ... -
通过先unlink()后close()创建安全的临时文件
2011-03-15 14:26 883使用POSIX(Portable Operating Syst ... -
parted操作磁盘
2011-03-12 16:15 807除了fdisk命令,在linux下还有一个功能也非常强大的磁盘 ... -
linux写缓存调优
2011-03-11 09:34 2003我们在磁盘写操作持续 ...
相关推荐
就目前而言,嵌入式Linux系统中,主要有三种远程调试方法,分别适用于不同场合的调试工作:用ROM Monitor调试目标机程序、用KGDB调试系统内核和用gdbserver调试用户空间程序。这三种调试方法的区别主要在于,目标机...
由gdb.txt 修改成 doc 文件易于打印 与大家分享
这是个简单的gdb文件,里面就是描述的是几个简单的几何图形
[root@redhat home]#gdb 调试文件:启动gdb (gdb) l :(字母l)从第一行开始列出源码 (gdb) break n :在第n行处设置断点 (gdb) break func:在函数func()的入口处设置断点 (gdb) info break: 查看断点信息 (gdb) ...
VisualGDB.5.2 试用版文件+破解文件,安装完试用版后把破解文件复制到安装的目录下,运行破解就可以了。亲测可以破解成功。
GDB常用命令,调试core文件最常用的
GDB调试GDB调试GDB调试GDB调试GDB调试 GDB调试GDB调试GDB调试GDB调试GDB调试
linux开发过程中收集的资料,内容包含了gdb、gsi_stl、文件锁、程序自启动
mips gdb 二进制文件
codeblocks 设置GDB调试watch支持中文和WXSTRING文件附件
本文档详细描述了在实际工程调试过程中如何使用gdb来分析core文件。结合实际中出现的一些问题,配图描述了如何通过gdb工具从堆栈,回溯等信息判断出来问题所在。对实际工程调试起到一定指导作用
windows下编译好的gdb7.5 最新版可在这找到 http://www.equation.com/servlet/equation.cmd?fa=gdb
在使用opencv时,连接的MingW中出现缺失gdb.exe文件,下载解压后直接放入bin文件里,选择路径即可。我的32位win7可以使用。
主要用于讲解如何使用开源的JAVA语言在地理信息开发中生成gdb文件,示例代码亲测可用,对于初学者有很好的帮助。
GDB中文手册 介绍GDB的基本调试方法
gdb64.exe和gdb.exe,呐,如名字所示喽
通过python遍历某个文件下面的所有gdb文件,然后对每个gdb文件中的某个字段批量修改成某个值
下载完该软件包,解压后可以看到gdb-7.7.1.tar.bz2和gdb-8.1.tar.xz两个压缩包,解压后可以复制到MinGw所在的文件夹下即可。
用python导出arcgis gdb中所有图层、表的数据结构,包含数据名称、别名、记录数等。两个参数,gdb路径和输出结构表的存储路径。参数可在arcgis创建脚本时候设置。
这是GDB完全手册,用来在Linux环境下的GDB调试,很重要