【发布时间】:2011-09-06 09:40:28
【问题描述】:
#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;
}
这是我的操作:
(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]) {
如你所见,printf 可以打印出environ[i],但是p environ[i] 给了我Cannot access memory at address 0x0,为什么?
【问题讨论】:
-
奇怪。我重现。如果我在 while 循环之前添加
ptr = environ,我可以使用ptr但environ保持空指针。 -
显然
gdb在没有环境的情况下启动了被调试程序的进程。 -
@pmg,它有一个环境。我经常在 gdb 中使用 set env 来确定这一点。
标签: c linux gdb environment-variables