在debug的程序处于中断状态时(必须是中断状态!), 可使用-exec command
的格式在vscode对应的debug窗口中输出gdb命令:
如何打印一个指针数组
以main()函数的指令数组argv
为例:
可以通过如下指令打印其值:
-exec x/16s *argv
0x7fffffffe435: "/home/LinuxC++/inbox/youShuanServProg/15/threadpool/websrv_old"
0x7fffffffe474: "127.0.0.1"
0x7fffffffe47e: "8080"
0x7fffffffe483: "SHELL=/bin/bash"
0x7fffffffe493: "COLORTERM=truecolor"
0x7fffffffe4a7: "TERM_PROGRAM_VERSION=1.71.0"
0x7fffffffe4c3: "PWD=/home/LinuxC++/inbox/youShuanServProg/15/threadpool"
0x7fffffffe4fb: "LOGNAME=root"
0x7fffffffe508: "XDG_SESSION_TYPE=tty"
0x7fffffffe51d: "_=/usr/bin/gdb"
0x7fffffffe52c: "VSCODE_GIT_ASKPASS_NODE=/root/.vscode-server/bin/784b0177c56c607789f9638da7b6bf3230d47a8c/node"
0x7fffffffe58b: "MOTD_SHOWN=pam"
0x7fffffffe59a: "LINES=17"
0x7fffffffe5a3: "HOME=/root"
0x7fffffffe5ae: "LANG=en_US.UTF-8"
0x7fffffffe5bf: "LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc"...
指令格式为 x/nf obj
, 其中x是打印目录,/n
代表打印单元的数量, f
代表以什么形式输出, 如t
是二进制, x
是16进制,上面s
就是按字符串输出,
上面指令的意思就是, 打印argv指向地址前16个字符串单元的内容。
其他示例:
-exec x/16xb *argv
0x7fffffffe435: 0x2f 0x68 0x6f 0x6d 0x65 0x2f 0x4c 0x69
0x7fffffffe43d: 0x6e 0x75 0x78 0x43 0x2b 0x2b 0x2f 0x69
-exec x/16tb *argv
0x7fffffffe435: 00101111 01101000 01101111 01101101 01100101 00101111 01001100 01101001
0x7fffffffe43d: 01101110 01110101 01111000 01000011 00101011 00101011 00101111 01101001