2.2 查看源码 (Viewing Source Code -list) 在GDB中,我们可以使用list命令来查看源代码。这是与程序进行对话的方式,就像我们阅读一本书,试图理解作者的意图。 (gdb) list 这将显示当前位置的源代码。正如孟子在《孟子·公孙丑上》中所说:“所以读书,为的是使人明明德,亲亲仁,达达良。”通过查看源代码,我们可以更好地理解程序
借助 readelf 命令可以知道:$ readelf main -p .debug_str [ 0] long unsigned int [ 12] short int [ 1c] /home/hyb/workspaces/gdb/sourceCode [ 40] main.c(显示部分内容)main 为你将要调试的程序名,这里我们可以看到原来的路径,那么我们现在替换掉它:(gdb) set substit...
和print 命令一样,display 命令也用于调试阶段查看某个变量或表达式的值,它们的区别是,使用 display 命令查看变量或表达式的值,每当程序暂停执行(例如单步执行)时,GDB 调试器都会自动帮我们打印出来,而 print 命令则不会。 也就是说,使用 1 次 print 命令只能查看 1 次某个变量或表达式的值,而同样使用 1 次 d...
在前面的例子中,由于当前正在print()函数中执行,GDB位于第0帧的上下文中。可以通过frame命令来获取当前正在执行的上下文所在的帧。 (gdb) frame #0 print (xx=10, xxptr=0x7fffffffe424) at test_main.cc:4 4 printf("In print():\n"); (gdb) 下面,我们尝试使用print命令打印下当前栈帧的值,如下: (...
print $_exitcode 显示程序退出时的返回值 set follow-fork-mode child 追踪子进程 set follow-fork-mode parent 追踪父进程 set detach-on-fork on fork调用时只追踪其中一个进程 set detach-on-fork off fork调用时会同时追踪父子进程 在调试多进程程序时候,默认情况下,除了当前调试的进程,其他进程都处于挂起状...
debug_str [] long unsigned int [] short int [ 1c] /home/hyb/workspaces/gdb/sourceCode [] main.c (显示部分内容) main为你将要调试的程序名,这里我们可以看到原来的路径,那么我们现在替换掉它: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 (gdb) set substitute-path /home/hyb/workspaces/...
在Linux系统中配置生成用于GDB分析的core dump(核心转储)文件,可以按照以下步骤进行: 步骤 1: 核心转储使能设置 首先,你需要确认系统的核心转储设置是否符合要求。可以通过以下命令检查当前设置: bashCopy Code ulimit -c 1.临时配置 这个命令会显示核心转储文件
(gdb) dir ./temp Source directories searched: /home/hyb/workspaces/gdb/sourceCode/./temp:$cdir:$cwd 这个时候它就能找到源码路径了。我这里使用的是相对路径,保险起见,你也可以使用绝对路径。 更换源码目录 例如,你编译好的程序文件,放到了另外一台机器上进行调试,或者你的源码文件全都移动到了另外一个目录...
$ readelf main -p .debug_str [ 0] long unsigned int [ 12] short int [ 1c] /home/hyb/workspaces/gdb/sourceCode [ 40] main.c(显示部分内容) 1. main为你将要调试的程序名,这里我们可以看到原来的路径,那么我们现在替换掉它: (gdb) set substitute-path /home/hyb/workspaces/gdb/sourceCode /...
print(x, ptr); return 0; } 第二:设置断点 可以在函数名和行号等上设置断点。程序运行后,到达断点就会自动暂停运行。此时可以查看该时刻的变量值、显示栈帧、重新设置断点或重新运行等。断点命令(break)可以简写为b。 格式 break 断点 举例 (gdb) b main ...