linux中gdb的使用方法
2015-06-22 20:20
555 查看
1.gdb
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。
一般来说,GDB主要帮忙你完成下面四个方面的功能:
(1)启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
(2)可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
(3)当程序被停住时,可以检查此时你的程序中所发生的事。
(4)动态的改变你程序的执行环境。
2.gdb使用方法
(1)gdb programname
program也就是你的执行文件,一般在当然目录下。
(2)gdb programname core
用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。
使用GDB,先从可执行文件中读取符号表(也就是用户定义的函数名称、变量名称等)信息,然后读取Core文件。如果不与可执行文件搅合在一起可以吗?答案是不行,因为Core文件中没有符号表信息,无法进行调试。
(3)gdb programname PID
如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID。gdb会自动attach上去,并调试他。program应该在PATH环境变量中搜索得到。
3.gdb的常用使用方法
4.core dump文件的生成方式
core dump文件,又称为核心转储文件。该文件的生成方式有如下几种:
(1)操作系统生成
当进程异常终止或者退出的时候,由操作系统把该进程当前运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等,写入到一个文件中,放到指定的位置。这个就是由操作系统生成core文件。
(2)使用gdb工具人工生成
步骤一:运行gdb命令
步骤二:在gdb工具中使用attach pid命令,将gdb附着到进程号为pid的进程上
步骤三:在gdb工具中使用gcore corename命令,生成名称为corename的core文件
步骤四:在gdb工具中使用detach命令,解除附着关联目标进程
步骤五:在gdb工具中使用q命令,退出gdb工具
(3)使用gcore工具人工生成
gcore不是二进制程序,而是一个shell脚本,该脚本可以生成指定进程的core文件。其实现原理和(2)是一样的。
gcore使用方法:
gcore -o corename pid 其中-o选项是可选的,表示将core dump文件写入到指定文件名corename的文件中。
5.core dump文件的闲杂知识
(1)ulimit工具可以修改用户的core文件大小的配置,如果配额是0,那么表示不允许产生core文件
(2)操作系统生成core文件的存储路径和core文件名的配置。
默认情况下,os生成的core文件和程序bin文件在同一个目录下,且core文件的名称固定为core。我们可以通过修改/proc/sys/kernel/core_pattern文件来修改这个默认配置。
例如如果将/proc/sys/kernel/core_pattern文件的内容修改为/home/coresave/core.%e.%p.%t
表示core文件产出在/home/coresave目录中,且文件名的形式为“core.程序文件名.进程id.产生core文件的时间”
参数的含义为:
参考资料来源于:
http://blog.csdn.net/haoel/article/details/2879 http://jimmyleeee.blog.163.com/blog/static/930961820103822435873/ http://baidutech.blog.51cto.com/4114344/904419/
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。
一般来说,GDB主要帮忙你完成下面四个方面的功能:
(1)启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
(2)可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
(3)当程序被停住时,可以检查此时你的程序中所发生的事。
(4)动态的改变你程序的执行环境。
2.gdb使用方法
(1)gdb programname
program也就是你的执行文件,一般在当然目录下。
(2)gdb programname core
用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。
使用GDB,先从可执行文件中读取符号表(也就是用户定义的函数名称、变量名称等)信息,然后读取Core文件。如果不与可执行文件搅合在一起可以吗?答案是不行,因为Core文件中没有符号表信息,无法进行调试。
(3)gdb programname PID
如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID。gdb会自动attach上去,并调试他。program应该在PATH环境变量中搜索得到。
3.gdb的常用使用方法
4.core dump文件的生成方式
core dump文件,又称为核心转储文件。该文件的生成方式有如下几种:
(1)操作系统生成
当进程异常终止或者退出的时候,由操作系统把该进程当前运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等,写入到一个文件中,放到指定的位置。这个就是由操作系统生成core文件。
(2)使用gdb工具人工生成
步骤一:运行gdb命令
步骤二:在gdb工具中使用attach pid命令,将gdb附着到进程号为pid的进程上
步骤三:在gdb工具中使用gcore corename命令,生成名称为corename的core文件
步骤四:在gdb工具中使用detach命令,解除附着关联目标进程
步骤五:在gdb工具中使用q命令,退出gdb工具
(3)使用gcore工具人工生成
gcore不是二进制程序,而是一个shell脚本,该脚本可以生成指定进程的core文件。其实现原理和(2)是一样的。
gcore使用方法:
gcore -o corename pid 其中-o选项是可选的,表示将core dump文件写入到指定文件名corename的文件中。
5.core dump文件的闲杂知识
(1)ulimit工具可以修改用户的core文件大小的配置,如果配额是0,那么表示不允许产生core文件
(2)操作系统生成core文件的存储路径和core文件名的配置。
默认情况下,os生成的core文件和程序bin文件在同一个目录下,且core文件的名称固定为core。我们可以通过修改/proc/sys/kernel/core_pattern文件来修改这个默认配置。
例如如果将/proc/sys/kernel/core_pattern文件的内容修改为/home/coresave/core.%e.%p.%t
表示core文件产出在/home/coresave目录中,且文件名的形式为“core.程序文件名.进程id.产生core文件的时间”
参数的含义为:
%% 单个%字符 %p 所dump进程的进程ID %u 所dump进程的实际用户ID %g 所dump进程的实际组ID %s 导致本次core dump的信号 %t core dump的时间 (由1970年1月1日计起的秒数) %h 主机名 %e 程序文件名
参考资料来源于:
http://blog.csdn.net/haoel/article/details/2879 http://jimmyleeee.blog.163.com/blog/static/930961820103822435873/ http://baidutech.blog.51cto.com/4114344/904419/
相关文章推荐
- linux中应用程序main函数中没有开辟进程的,它应该在那个进程中运行呢?
- Nexus设备渗透测试平台 – Kali Linux NetHunter
- linux 端口占用
- 给VMware下的Linux扩展磁盘空间(以CentOS7)
- Red Hat Enterprise Linux 7(RHEL7)配置静态IP地址
- linux rsync +inotify 实现 实时同步
- linux1.0内核硬件须知
- 查看Linux游戏服务器运行性能
- 用nohup命令让Linux下程序永远在后台执行
- linux sun/awt/X11GraphicsEnvironment
- centos 6.5 安装桌面环境
- Linux C和MySQL数据库写的一个“电话本管理程序”
- Linux的inode的理解
- 如何在 CentOS 7 上安装 Percona服务器
- linux中的/ect/group和/ect/passwd文件格式
- 关于对linux磁盘 分区 挂载的最新认识
- linux常用命令
- CentOS6.3编译安装LNMP环境
- linux driver编译环境搭建和命令
- centos7下开机启动 postgres开机启动