信号的处理
程序是和网络相关的,调试期间经常地收到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 1256今天一同事说把A机器的/var/spool/cron/admi ... -
信号量基础知识
2011-05-10 18:40 1010linux 中信号相关的一个结构体 struct sigact ... -
asprintf
2011-05-08 21:49 2359sprintf() 的整个介面长的样子的是: int ... -
获取用户输入的问题(清除stdin)
2011-05-08 21:37 1933需求: 从终端获取用户输入的用户名和密码(有效 ... -
Linux下的UDP/TCP端口映射(netcat and socat)
2011-05-07 20:42 9699说起来有点土,事到如今 ... -
linux任务管理
2011-05-07 20:32 714disown是bash内部命令,nohup是外部命令 diso ... -
boost multi_index_container
2011-04-27 21:18 1546本章介绍的主题是multi_i ... -
变量相关命令(env,export,set,read, array, declare
2011-04-26 21:38 1021系统的预设参数文件:/ ... -
stl priority_queue
2011-04-26 21:20 619简单的使用示例。 view plaincopy to cli ... -
linux backlog
2011-04-25 15:13 1515在linux中,/proc/sys/net/core/so ... -
linux backlog
2011-04-25 15:13 746在linux中,/proc/sys/net/core/so ... -
stl hash_map
2011-04-23 19:57 769#include <cstdlib> #incl ... -
linux串口登陆
2011-04-23 09:31 1494在这个互连网高速发展的时代, 企业内网络设备的安全和运行稳定也 ... -
linux rename
2011-04-21 09:38 729Linux中rename命令的用法 刚学习linux的时候, ... -
stl heap
2011-04-17 10:01 791make_heap 原型: #include <a ... -
expand and upexpand
2011-04-09 13:33 733expand: NAME expand - co ... -
内核模块相关命令:lsmod,depmod,modprobe
2011-03-28 13:24 1137lsmod 功能:列出内核已载入模块的状态 用法:lsmod ... -
通过先unlink()后close()创建安全的临时文件
2011-03-15 14:26 908使用POSIX(Portable Operating Syst ... -
parted操作磁盘
2011-03-12 16:15 831除了fdisk命令,在linux下还有一个功能也非常强大的磁盘 ... -
linux写缓存调优
2011-03-11 09:34 2029我们在磁盘写操作持续 ...
相关推荐
在实际使用中,你可以通过以下步骤配置和使用gdb.exe: 1. **安装MinGW和gdb**:确保MinGW已经正确安装,并将gdb.exe添加到bin目录。 2. **配置环境变量**:将MinGW的bin目录添加到系统PATH环境变量。 3. **编译带...
在描述中提到的“几何图形”,可能意味着这个GDB文件是在调试一个与图形处理或计算几何相关的程序。这可能是一个教学示例,用于演示如何使用GDB调试涉及图形绘制或计算的代码。GDB可以通过查看内存中的数据结构,...
1. **配置文件**:如`gdbinit`,是GDB的启动配置文件,用户可以在这里设置默认的行为,如自定义命令、初始化变量等。 2. **文档**:可能包含GDB的手册页、用户指南、常见问题解答等,帮助用户更好地理解和使用GDB。 ...
GDB允许用户处理和响应程序接收到的信号,如中断(`SIGINT`)或非法指令(`SIGSEGV`),有助于调试信号相关的错误。 总之,GDB是一个功能强大的调试工具,通过它,开发者可以深入程序的运行细节,有效地定位和解决问题...
了解不同类型的异常信号及其产生的原因对于正确地使用gdb分析core文件至关重要。以下是几种常见的异常信号: 1. **信号6:Abort错误** - 产生原因:程序调用了`abort()`函数。这可能是因为显式的调用、`assert()`...
在GIS领域,ArcGIS是一款广泛使用的地理信息系统,它提供了丰富的数据管理和分析功能。本文将详细介绍如何使用ArcGIS的工具箱以及Python脚本来...了解并掌握这些技术,能够使GIS专业人员在数据管理和处理方面更加高效。
10. **异常和信号处理**:说明如何调试程序中的异常和信号,如segfault( segmentation fault)。 11. **调试动态链接库**:介绍如何处理动态加载的库和它们的调试问题。 12. **性能分析**:虽然GDB主要用于调试,...
就目前而言,嵌入式Linux系统中,主要有三种远程调试方法,分别适用于不同场合的调试工作:用ROM Monitor调试目标机程序、用KGDB调试系统内核和用gdbserver调试用户空间程序。这三种调试方法的区别主要在于,目标机...
1. **启动GDB**:通过命令行输入`gdb <可执行文件>`来启动GDB并加载目标程序。 2. **设置断点**:使用`break`或`b`命令可以在特定行号、函数名或地址设置断点。 3. **运行程序**:使用`run`或`r`命令来开始执行程序...
GDB 提供了多种方法来启动调试会话,例如通过命令行参数、环境变量或配置文件来指定要调试的程序。用户可以通过在命令行中输入「gdb」命令来启动 GDB,或者通过在 IDE 中配置 GDB 来启动调试会话。 知识点 3: GDB ...
GDB(GNU Debugger)是Linux环境下用于调试C/C++程序的强大工具,尤其在...熟练掌握这些GDB命令,可以帮助开发者更有效地定位和解决程序中的错误,尤其是在处理复杂的崩溃问题时,core dump文件能提供至关重要的线索。
`license`文件包含关于使用FileGDB_API的法律条款和限制,确保在开发和部署应用时遵守这些规定。 总结来说,VS2019 C++编译FileGDB_API 1.5.2涉及到多个步骤,包括环境配置、项目设置、资源管理以及示例的编译和...
另外,还可以使用systemd服务配置文件来控制程序开机启动。熟悉这些机制可以帮助开发者确保服务的可靠性。 5. **makefile**:Makefile是用于自动化编译过程的文本文件,定义了目标文件、依赖关系和编译规则。通过...
GDB提供了多种方式来选择调试文件和模式,并在启动期间执行一系列初始化操作。当调试完毕,可通过`quit`命令安全退出GDB。 - **Shell命令与日志记录**:GDB支持在调试过程中执行Shell命令,方便用户进行环境配置或...
这个“合并多个MDB或GDB工具无代码”的压缩包文件很可能包含了这样的脚本,使用者只需要配置好参数,就可以在ArcGIS环境中直接运行。 总的来说,通过熟练掌握arcpy,我们可以轻松地对GIS数据进行复杂的操作,包括但...
- **GDB启动时的活动**:加载配置文件、初始化环境等。 **2.2 退出GDB** - 使用`quit`命令退出调试会话。 **2.3 Shell命令** - 在GDB内部可以通过`!`执行shell命令。 **2.4 日志输出** - 可以使用`log`命令来...
它是GDB的主程序,通过这个文件,开发者可以在本地系统上启动调试会话,对程序进行断点设置、单步执行、查看变量、分析内存等操作。 而"**gdbserver.exe**"是GDB的一个服务器版本,它的作用在于远程调试。当你需要...
在GIS(地理信息系统)领域,数据的存储和处理是至关重要的。GDAL(Geospatial Data Abstraction Library)是一个开源的库,它提供了对多种地理空间数据格式的支持,包括ESRI的FileGDB(File GeoDatabase)。本篇...
- **服务程序配置文件**:包括`inetd.conf`、`hosts.allow`、`hosts.deny`等,用于管理网络服务的启动和访问控制。 - **硬件访问文件**:如`/etc/modules.conf`用于内核模块的加载,`/dev`目录下的设备文件用于硬件...