假设已定义:int a[100] 类型print a然后gdb将自动将其显示为数组:1, 2, 3, 4....但是,如果a作为参数传递给函数,那么gdb会将其视为普通的int指针,类型print a将显示:(int *)0x7fffffffdaa0.如果我想查看a数组,该怎么办?
在调整了这个答案之后,我编写了以下循环来简单地在名为“gdb_script.gs”的脚本中在 gdb 中打印一个数组。我究竟做错了什么?
set $end=64
while ($i<$end)
print $i
print volfrac($i, :, 1)
set $i=$i+1
end
Run Code Online (Sandbox Code Playgroud)
其中 volfrac(:,:,:) 是一个 Fortran 数组。我收到错误:
gdb_script.gs:14: Error in sourced command file:
A syntax error in expression, near `<$end)'.
Run Code Online (Sandbox Code Playgroud) #include <unistd.h>
#include <stdio.h>
extern char **environ;
int main(int argc, char *argv[]) {
int i = 0;
while(environ[i]) {
printf("%s\n", environ[i++]);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是我的观点:
(gdb) n
8 printf("%s\n", environ[i++]);
(gdb) p environ[i]
Cannot access memory at address 0x0
(gdb) n
LOGNAME=root
7 while(environ[i]) {
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,printf可以打印出来environ[i],但是p environ[i]给了我Cannot access memory at address 0x0,为什么?
define traverse
while(CONDITION)
if $start == 0
set $start = 1
print_node
print_rss_item
else
continue
print_node
print_rss_item
end
end
end
Run Code Online (Sandbox Code Playgroud)
如果程序完成,我需要什么条件来停止循环?
我想做printf风格打印GDB.例如,我想打印一个变量值,但用一些文字来描述它是什么.可以这样做,如果是的话,你能举个例子吗?