https://blog.csdn.net/xuzhina/article/details/76733977 脚本名称为hello.py,内容如下: import gdb class HelloPrefixCommand ( gdb.Command ): "just to say hello" def __init__(self): super( HelloPrefixCommand, __init__("hello", gdb.COMMAND_SUPPORT, gdb.COMPLETE_NONE, True ) HelloPrefixCommand () 加载方法1: sudo gdb httpd -x hello.py 查看一下: (gdb) help hello just to say hello List of hello 加载方法2: (gdb) source hello.py 查看一下: (gdb) help hello just to say hello List of hello subcommands
,这时可以辅助gdb脚本,安装扩展“GDB syntax”可以高亮语法,然后把需求告诉AI,让AI帮你写,有问题修复后保存到文件,然后对应位置断下后,运行gdb脚本函数观察所有相关的值。 (这个不知道是不是bug)断点使用vs code 图形界面系统提供的能力,即在对应源码处按F9或单击行号左边的位置下断点,不要使用"调试控制台"用gdb脚本来下断点,如-exec break xxx 这种命令断下后有异常 /config --debugmake -j16编写.vscode/launch.json启动文件菜单:运行->添加配置,可以生成一个空配置,接着再按F5(或菜单:运行->启动调试),选择gdb,会生成基础的 脚本", "text": "source /home/xx/Downloads/my_gdb_scripts.gdb", "ignoreFailures gdb脚本-exec help user-defined-exec help user-definedUser-defined commands.The commands in this class are
3 启动GDB 的方法 gdb program program 也就是你的执行文件,一般在当前目录下。 5 设置断点 5.1 简单断点 break 设置断点,可以简写为b b 10 设置断点,在源程序第10行 b func 设置断点,在func函数入口处 5.2 多文件设置断点 设置一个条件断点 b test.c:8 if intValue == 5 7 维护停止点 delete [range...] 如果要同时删除几个,编号可以用空格分隔,如果要删除一个范围内的编号,可以用减号表示(如:2-5) disable display dnums… enable display dnums 一般是打印当前行的上5行和下5行,如果显示函数是是上2行下8行,默认是10行,当然,你也可以定制显示的范围,使用下面命令可以设置一次显示源程序的行数。
1:gdb打印动态数组: x=(int*)malloc(25*sizeof(int)); p *x@25 或者 p (int [25])*x 完整打印字符串的值: set print elements
本文链接:https://blog.csdn.net/weixin_40313634/article/details/88619906 实验楼值GDB常用命令实战课程学习记录 1. 安装工具: sudo apt-get install gdb 2. 编译可调式程序: gcc bugging.c -o bugging -g -m32 -o: 生成的可执行文件的名字。 -g: 生成的程序允许gdb 调试。 -m32:生成32位的程序。默认,程序位数和OS位数相同。 编译32位程序时报错:fatal error: sys/cdefs.h: 没有那个文件或目录。 调试: 开始调试:gdb bugging 结束调试:quit 断点在循环中时: enable once Num // 断点hit 一次后,失效。
GDB官方文档:GDB Documentation 如下图所示: ? 官网提供了PDF、HTML各种版本,如下: Debugging with GDB gdb.pdf.gz 2638 KB gdb.dvi.gz 1033 KB gdb.ps.gz 1499 KB gdb.html.tar.gz
理解 自己总结 gdb会记住历史命令,按一次n,回车以后再回车还是n -g才是debug debug才有调试信息,默认的没有 mycode是可执行程序,再gdb这个可执行程序 q退出/quit list 或者l就能看到代码 l几就能看到第几行,l0后回车几下就能显示全部了 l add后加个函数名可以看函数 r从头一直到尾,开始运行相当于F5, 打断点,b+行号 info b,是查断点,退出重进就什么都没有了 是从一个断点到另一个断点 disable暂时禁用断点,Enb的y也变成了n 回y就直接跳过1和2进去3了 enable 1,Enb就重新恢复y,就可以继续用这个断点了 b main直接在main出打断点, 不过是在第5行
回车在GDB相当于重复上一个命令。 启动GDB运行程序 运行GDB调试a.out程序有以下几种方式: 方式一:直接运行gdb,然后在gdb中执行“file a.out”加载程序。 <break_args> if <condition>:条件断点,break_args可以是上面break后面的参数,condition是具有布尔值的条件表达式,如break 20 if i == 5, 在i等于5的时候20行触发断点 tbreak <break_args>:临时断点,功能同break,区别是断点在第一次停住以后,自动被删除 查看断点: info breakpoints [n]:其中n是断点序号 删除断点:delete(d) delete [break_num_list] [range]:break_num_list是可选参数,可以是一个断点序号的列表,用空格分开,range可以是一个范围例如1-5, 删除编号区间[1,5]的断点,如果不提供任何参数则删除所有的断点。
gdb的启动 准备内容 一般来说GDB主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,必须要把调试信息加到可执行文件中。 gdb program core 用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。 GDB启动时,可以加上一些GDB的启动开关,详细的开关可以用gdb的help查看。 gdb技巧 1. gdb小技巧汇总 gdb技巧挺多的,比如说直接回车是继续执行上一次的代码 巧用tab补全 1. 比如输入b连续按下两次tab,可以查看gdb的所有b开头的gdb指令 2. info line info line 与 i line 等价 第53行代码的起始地址是 0x5555555553b5【 main 函数的偏移量为 41 的位置】。
GDB高级技巧 yijian 2009-2-22 难得有雅兴,边动手边记录操作步骤,本文主要示例一些平常较少使用到的GDB功能,掌握这些用法有助于提高GDB调试和解决问题的能力。 1) 查看宏 默认情况下,在GDB中是不能查看宏的值及定义的,但通过如下方法,则可以达到目的: 编译源代码时,加上“-g3 -gdwarf-2”选项,请注意不是“-g”,必须为“-g3”,查看宏的值使用命令 就会打印出“break at main() function” 5) 自定义命令 除了在.gdbinit文件自定义命令外,还可以直接在GDB运行环境定义命令,语法相同 6) 定义命令钩子 如果想在命令执行完,再执行某个或某些命令,则: #define hookpost-print echo ----------\n end 7) GDB中循环 GDB支持if/else/while /loop_break/loop_continue,如: (gdb) set $x=1 (gdb) while $x==1 >p $x >set $x=0 >p $x >end -
简介 GDB是GCC的调试工具。其功能如下: 启动程序,使程序按自定义形式运行; 使程序停止指定断点位置; 程序停止后,检查程序执行中的相应情况; 动态改变程序执行环境。 gdb调试 能进行GDB调试,一般在编译过程中,需使用-g参数。如果不使用-g参数,则在gdb调试过程中,将不能得到程序的函数名、变量名等信息,而只能看见运行时内存地址。 q:退出gdb调试环境。 help [命令名称]:gdb帮助命令,提供对GDB各种命令的解释说明。 如果指定了“命令名称”参数,则显示该命令的详细说明;若果没有指定参数,则分类显示所有GDB命令,共用户进一步浏览和查询。 cd dir:运行GDB,使用dir作为gdb的工作目录。 gdb filename // 其中filename为可执行文件名 gdb filename core // core是程序core dump产生的文件,产生core文件,需设置栈大小无线使用ulimit
values contained in a Fortran COMMON block info copying -- Conditions for redistributing copies of GDB List the variables local to a scope info selectors -- All Objective-C selectors info set -- Show all GDB watchpoints -- Synonym for ``info breakpoints'' info win -- List of all displayed windows x x /50x 0xxxxxx x /5i 程序名 core文件路径 或者 gdb 程序名 –core core文件路径 调试命令 r 运行 c 继续运行,直到碰到断点或异常才会停止 ni 单步 si 步入 jump 跳到那里执行 >echo rdx= >print $rdx >x /20gx 0x620000 >end gdb-peda$ 给原有断点加上条件 这个是不用加if了 condition <breakpoint_Num
列出从第几行开始的源代码 list 函数名 列出某个函数的源代码 next(或n) 执行下一行语句 print(或p) 打印表达式的值,通过表达式可以修改变量的值或者调用函数 quit(或q) 退出gdb 命令 描述 watch 设置观察点 info(或i) watchpoints 查看当前设置了哪些观察点 x 从某个位置开始打印存储单元的内容,全部当成字节来看,而不区分哪个字节属于哪个变量 资料 gdb
目前觉得比较重要的就是: 1.设置断点: gdb命令 break,也可以用 b 。 比如, b cyc::TcpClient::onMessage 2.查看参数 gdb命令 print,也可以 p。方法 p para.显示一次。 3.一直显示 gdb命令 display,方法 display para。 取消的话 undisplay 编号 4.列出信息 gdb命令 info,info break, info display 5.调试 单步调试 n,进入函数的单步调试 s,跳到下一个断点 c 6.读取文件 gdb命令 file , file path. 7.执行 gdb 命令 run, run args. 8.显示代码 gdb 命令 list,list [行号] 之后可以按 Enter 继续显示
/test 时显示如下结果: hello 1 hello 2 hello 3 hello 4 hello 5 4 gdb调试程序 如果需要使用gdb调试 在编译test.c的时候,并把调试选项打开 回车: (gdb) list 1 #include<stdio.h> 2 #include<string.h> 3 void prints(int i) 4 { 5 printf("hello prints(i); (gdb) hello 5 11 for(i=1;i<6;i++){ (gdb) 15 } (gdb) 5)逐条执行并进入函数: 用start命令重新来过,step命令( next 11 for(i=1;i<6;i++){ (gdb) next 12 prints(i); (gdb) step prints (i=1) at test1.c:5 5 bt #0 prints (i=1) at test1.c:5 #1 0x08048407 in main () at test1.c:12 (gdb) main传进来的参数是i=1。
如果使用gdb来调试,这种问题就可以迎刃而解了。gdb 可以完全操控程序运行,让程序走就走,让程序暂停就暂停,还可以随时查看程序运行时内部变量的值等信息。 使用 gdb 调试程序必须保证符合以下两个条件。 如下: (gdb) list 1#include <stdio.h> 2#include <unistd.h> 3 4int main(int argc, char* argv[]) 5{ 6pid_t breakpoint keep y 0x080484fb in main at fork.c:11 2 breakpoint keep y 0x080484f5 n 0x080484fb in main at fork.c:11 2 breakpoint keep y 0x080484f5 in main at fork.c:8 stop
记录一些GDB调试相关的东西。 coredump设置无限大小。 gdb --batch --quiet -ex "thread apply all bt full" -ex "quit" MobileServer coreTmp/core.MobileServer.1692778494 整了一个脚本: echo "GDB调试工具. LOGS/COREDUMPLOG_"$v_time".txt" echo "要调试的程序为:"$EXE_NAME" 最终的core文件为:"$core_file_new" 输出文件为:"$outFile gdb
一、打开GDB 1、gdb filename 加载该文件到gdb 2、gdb file filename 如果gdb filename失败,可以在打开gdb以后,通过file来加载调试文件 3、gdb *注意-g,在linux下用gcc编译时,如果不加-g,编译器会进行优化,就不会生成调试信息,无法调试,也可以使用-ggdb,这是gcc为gdb提供的更详细的调试信息,别的调试器无法使用。 until:可以运行程序直到退出循环体; finish:运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息; watch:设置一个监视点,一旦被监视的“表达式”的值改变,gdb 的断点10次以后才触发; kill:将强行终止当前正在调试的程序; help 命令:help 命令将显示“命令”的常用帮助信息; call 函数(参数):调用“函数”,并传递“参数”,如:call gdb_test 显示源代码和反汇编窗口; display: 在每次单步进行指令后,紧接着输出被设置的表达式及值; stepi或nexti:单步跟踪一些机器指令; Ctrl + L:刷新窗口; quit:简记为 q ,退出gdb
基本操作 命令 说明 gdb exceFile 不带命令行参数 gdb -args execFile arg0 ... argn 带命令行参数 r 开始执行(run的简写)。 正在执行的gdb可以使用source ~/.gdbinit。
命令 解释 示例 file <文件名> 加载被调试的可执行文件 如果执行gdb与被调试的程序不在同个目录,则需要带上路径 (gdb) file gdb_sample l <行号> List 的缩写,打印源码 (gdb) n p <变量名称> Print 的缩写, 打印变量的值 (gdb) p i bt Backtrace 的缩写,查看堆栈信息 (gdb) bt q Quit 的缩写,退出gdb 调试环境 月 9 17:19 gdb_sample 可以用 gdb gdb_sample 直接进入调试环境,也可以先启动gdb,再打开可执行文件: GNU gdb (GDB) Red Hat Enterprise (gdb) 上面表示可执行文件已经加载成功,(gdb) 是gdb内部命令引导符,等待用户输入命令 下面使用l 命令来查看源码,可以指定行号,回车可以继续往下查看: (gdb) l 1 1 3 @brief 4 @author huanghaibin 5 @version 1.0 6 @date 2018-