首页 > 编程知识 正文

linux调试c程序工具(linux系统c语言gdb调试)

时间:2023-05-04 04:18:36 阅读:103761 作者:168

GDB是由GNU开源组织发布的UNIX/LINUX操作系统下基于命令行的强大程序调试工具。对于在Linux下工作的C程序员来说,Gdb是一个必不可少的工具。

00-1010对于调试C/C程序,需要在编译前添加-g选项:

$g -g hello.cpp -o hello调试可执行文件:

programprogram是您的可执行文件,通常位于当前目录中。

调试核心文件(核心是非法执行程序后核心转储后生成的文件):

$gdb程序核心转储文件

$gdb程序核心。11127调试服务程序:

$gdb程序PID

$gdb hello 11127如果你的程序是一个服务程序,你可以指定服务程序运行时的进程ID。Gdb会自动附加并调试它。应该在PATH环境变量中搜索程序。

00-1010,启动gdb后,进入交互模式,通过以下命令完成程序的调试;注意高频使用的命令通常有缩写。熟练使用这些缩写可以提高调试效率。

00-1010RUN:缩写为R,其功能是运行程序。当遇到断点时,程序将在断点处停止运行,等待用户输入下一个命令。Continue(缩写C):继续执行直到下一个断点(或运行结束)next:(缩写N),单步跟踪程序,遇到函数调用时,不要进入这个函数体;这个命令和step的主要区别是,当step遇到用户自定义函数时,会单步执行函数运行,而next直接调用函数,不会进入函数体。Step(缩写为S):分步调试。如果有函数调用,输入函数;与命令n不同,n是被调用函数的直到:当SDDW厌倦了循环体中的单步跟踪时,这个命令可以运行程序,直到退出循环体。直到行号:运行到某一行,不仅仅是跳出循环完成:运行程序直到当前函数返回,函数返回时打印栈地址、返回值、参数值。调用函数(参数):调用程序中可见的函数并传递“参数”,如:call gdb_test(55)quit:缩写为q,Exit gdb

1.1. 启动gdb

break n(缩写为b n):在第n行设置断点(可以自带代码路径和代码名称:b oagupdate . CPP 3360578)b fn1 if a & gt;b:条件断点设置break func(break缩写为b):在func()的入口设置断点,例如break cb_buttondelete断点号n:删除第n个断点禁用断点号n:暂停第n个断点启用断点号n:打开第n个断点清除行号n:清除第n个断点信息b(info breakers):显示当前程序的断点设置删除断点。清除所有断点:

1.2. gdb交互命令

list:缩写为L,其功能是列出程序的源代码,默认情况下一次显示10行。List行号:显示当前文件中行号周围的10行代码,例如list 12list函数名:显示函数名所在函数的源代码,例如list mainlist:如果没有参数,将输出以下内容作为最后一个list命令。

运行

print expression:缩写为p,其中“expression”可以是当前正在测试的任何程序的有效表达式,例如当前正在用C语言调试的程序,那么“expression”可以是任何C语言的有效表达式,包括数字、变量甚至函数调用。a:将显示整数a的值。打印a:a中的值将增加1。并显示打印名称:将显示字符串名称print gdb_test(22)的值:以整数22为参数调用gdb_test()函数print gdb_test(a):以变量a为参数调用gdb_test()函数display表达式:在单步操作中非常有用。使用display命令设置表达式后,将在每个单步指令后立即设置。例如,显示awatch表达式:设置观察点。一旦被监控表达式的值发生变化,gdb将强制终止正在调试的程序。比如watch awhatis:查询变量或函数信息函数:查询函数扩展信息局部变量:显示当前栈页

设置断点

的所有变量,其中/bt:当前运行的栈列表;Backtrace向上/向下显示当前调用堆栈,以更改堆栈显示的深度。set args参数:指定运行时参数show args:检查set参数信息程序:检查程序是否正在运行、进程号以及被挂起的原因。

查看源代码

布局:用于拆分窗口,您可以在测试时检查代码:布局src:显示源代码窗口布局asm:显示反汇编窗口布局regs:显示源代码/反汇编和CPU寄存器窗口布局拆分:显示源代码和反汇编窗口Ctrl:刷新窗口

00-1010

打印表达式

Cgdb可以看作是gdb的接口增强版,用来替代gdb的gdb -tui。cgdb的主要功能是在调试时同步显示代码,这无疑增加了调试的便利性和效率。界面类似vi,符合unix/linux下开发者的习惯;如果你熟悉gdb和vi,你几乎可以立即使用cgdb。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。