当前位置:   article > 正文

gdb 常用命令汇总(持续补充)_gdb where

gdb where

gcc 编译

gcc -g hello.c -o a.out     // 编译并在目标文件中添加调试信息
  • 1

启动 gdb

  • 直接指定文件启动
$ gdb a.out
  • 1
  • 先启动gdb,再载入文件
$ gdb
(gdb) file a.out		// 载入文件
  • 1
  • 2

带参数调试

参考:Your Program’s Arguments

$ gdb a.out							// 先正常启动gdb调试
(gdb) run [arg1] [arg2] [...]		// 以指定参数重新运行当前已经加载的程序
(gdb) run					// 采用和上次run相同的参数,或者 set args 指定的参数
  • 1
  • 2
  • 3

查看转储文件

gdb [exec_file] [core_file]
gdb -c [core_file] [exec_file]
  • 1
  • 2

调试已经运行的进程

(gdb) attach process-id			// 将进程附加到当前的 gdb
(gdb) detach					// 将进程从 gdb 释放
  • 1
  • 2

显示源代码

更详细参考 Printing Source Lines
默认显示行数为10行。

list			// 显示当前行附近的代码,如果再次执行list,则接着上次显示的代码继续显示
list linenum
list function
list first,last	// 包括 last 行
list -			// Print lines just before the lines last printed.
list +			//Print lines just after the lines last printed.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

打印数组

  • 静态数组
int x[25];

(gdb) print x       // 可以输出整个数组
  • 1
  • 2
  • 3
  • 动态数组
int *x;
x = (int*) malloc(25 * sizeof(int));

(gdb) print x       // 打印数组地址
(gdb) print *x      // 打印第一个元素

//可以使用下面两种方法输出整个数组
(gdb) print *x@25       		// 人工数组 (artificial array)
(gdb) print (int [25]) *x       //  强制类型转换
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

查看当前执行位置

使用命令 frame 或 where。

(gdb) frame
#0  unpack (
    sha1=0x7fffffffdcf0 "...") at read-tree.c:16
16                      unsigned char *sha1 = buffer + len;
(gdb) where
#0  unpack (
    sha1=0x7fffffffdcf0 "...") at read-tree.c:16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

打印字符串

参考 gdb中三种输出 print, x, display 的区别

char *a = "hello world";
char b[] = "hello world";
void *c = "hello world";
  • 1
  • 2
  • 3

x 对于变量a, b, c 均能正确显示:

(gdb) x/s c
0x555555556004: "hello world"
  • 1
  • 2

对于变量 a,b,命令 print 能正确显示,但是对于变量 c 需要强制类型转换。

(gdb) print/s a
$7 = 0x555555556004 "hello world"

(gdb) print/s c
$5 = (void *) 0x555555556004
(gdb) print/s (char*)c
$7 = 0x555555556004 "hello world"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

修改变量

(gdb) set variable i = 10
  • 1

线程的附着和分离

(gdb) attach pid_num
(gdb) detach
  • 1
  • 2

查询所有线程

info threads
  • 1

查询所有线程的堆栈信息

thread apply all bt
  • 1

切换线程

thread num
  • 1

切换栈帧

frame num
  • 1

查看当前栈帧的栈信息

info frame
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/288007
推荐阅读
  

闽ICP备14008679号