gdb调试整理

调试环境:linux
调试工具:gdb

调试类别

1、调试core文件  gdb 应用程序名 core文件名
2、调试正在执行的程序 gdb 应用程序名 pid
3、gdb 应用程序名         
4、gdb --args 应用程序名 应用程序的运行参数

常用命令

* list 显示程序中的代码,常用使用格式有 l (+/-)n
* break :在程序中设置断点,当程序运行到指定行上时,会暂停执行。使用格式:break 要设置断点的行号
* clear :和break相反,clear用于清除断点。使用格式:clear 要清除的断点所在的行号
* run :启动程序,在run后面带上参数可以传递给正在调试的程序。
* whatis :显示某个变量或表达式的数据类型。使用格式:whatis 变量或表达式
* print :打印变量或表达式的值。使用格式:print
* frame :打印栈帧。使用格式: frame 栈帧号
* info frame :显示当前栈帧的详细信息。
* until(u) : 一直执行到当前行或指定位置,或是当前函数返回 until + 行号

线程操作:

info threads    #   查看所有线程信息
thread 线程id   #   切换到指定线程
thread apply [threadno | all ] 参数     #   对所有线程都应用某个命令

子进程调试:

set follow-fork-mode child|parent   #   fork后,需要跟踪谁
show follow-fork-mode
set detach-on-flow on|off           #   fork后,需要两个都跟踪吗

info forks                          #   显示所有进程信息
fork 进程id                         #   切换到某个进程
detach-fork 进程id                  #   不再跟踪某个进程
delete fork 进程id                  #   kill某个进程并停止对它的跟踪

检查点:     checkpoint/restart
查看停止原因:  info program

-------------------------待补充-----------------------------

gdb调试整理

时间: 2024-10-28 22:46:40

gdb调试整理的相关文章

gdb调试命令

本篇摘自互联网,纯属自己学习笔记,然分享给看到我的博客的人们. 用GDB调试程序 GDB是一个强大的命令行调试工具.大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本.UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能. 于是UNIX下的软件比Windows下的软件更能有机地结合,各自发挥各自的长处,组合成更为强劲的功能.而Windows下的图形软件基本上是各自为营,

GDB调试 (五)

查看运行时数据-------        在你调试程序时,当程序被停住时,你可以使用print命令(简写命令为p),或是同义命令inspect来查看当前程序的运行数据.print命令的格式是:        print <expr>    print /<f> <expr>        <expr>是表达式,是你所调试的程序的语言的表达式(GDB可以调试多种编程语言),<f>是输出的格式,比如,如果要把表达式按16进制的格式输出,那么就是/x

GDB技巧整理

https://blog.atime.me/note/gdb-tricks.html 整理常用的gdb技巧. 常用命令 常用的gdb命令... 启动gdb 直接运行 gdb --args prog arg1 arg2 运行gdb后使用run命令 gdb prog run arg1 arg2 attach到已运行的程序 gdb --pid ${PID_OF_PROG} ptype ptype用于显示Symbol的类型,示例源码为: struct ABC { int val; } int main(

比较全面的gdb调试命令

用GDB调试程序 GDB是一个强大的命令行调试工具.大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本.UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能. 于是UNIX下的软件比Windows下的软件更能有机地结合,各自发挥各自的长处,组合成更为强劲的功能.而Windows下的图形软件基本上是各自为营,互相不能调用,很不利于各种软件的相互集成.在这里并不是要和Win

gdb调试C程序

gdb调试 概述 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC.BCB的图形化调试器更强大的功能.所谓“寸有所长,尺有所短”就是这个道理. 一般来说,GDB主要帮忙你完成下面四个方面的功能: 1) 启动你的程序,可以按照你的自定义的要求随心所欲的运行程序. 2) 可让被调试的程序在你所指定的调置的断点处停住.(断点可以是条件表达式) 3) 当

Linux多进程和多线程的一次gdb调试实例

转载https://typecodes.com/cseries/multilprocessthreadgdb.html 1 原文整理 默认设置下,在调试多进程程序时gdb只会调试主进程.gdb7以上的版本(gdb --version)支持多进程调试,只需要设置好follow-fork-mode(fork追踪模式)以及detach-on-fork(指示GDB在fork之后是否断开某个进程的调试)即可. 这两个参数的设置命令分别是:set follow-fork-mode [parent|child

经典的GDB调试命令,包括查看变量,查看内存

经典的GDB调试命令,包括查看变量,查看内存 在你调试程序时,当程序被停住时,你可以使用print命令(简写命令为p),或是同义命令inspect来查看当前程序的运行数据.print命令的格式是: print print / 是表达式,是你所调试的程序的语言的表达式(GDB可以调试多种编程语言),是输出的格式,比如,如果要把表达式按16进制的格式输出,那么就是/x. 一.表达式 print和许多GDB的命令一样,可以接受一个表达式,GDB会根据当前的程序运行的数据来计算这个表达式,既然是表达式,

gdb调试

[前言]使用gdb调试前,在编译程序时,要加 -g 选项,否则你将看不见程序的函数名.变量名,所代替的全是运行时的内存地址. 1.开始调试 a.  gdb <program> program也就是你的执行文件,一般在当前目录下. b. gdb <program> core 用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件. 2.[列出源码],从第n行开始(编译时要加 -g 选项) l n 3.[设置断点]在第N行加断点 break

Go语言gdb调试踩坑

整个是一个docker环境 docker版本: 1.12.1,镜像是我自己做的基于ubuntu:14.04.05. 容器操作系统版本: Ubuntu 14.04.5 LTS go版本: 1.6.3 在gdb中执行run命令出错! 错误输出: warning:Error disabling address space randomization: Operation not permitted 环境:docker 解决办法: warning:Error disabling address spac