我尝试在C代码中调用getenv,这可以在终端中返回正确的env字符串,而在GDB / DDD中返回NULL。
$scope.addContactForm.contactNumber.$setValidity('required', false);
GDB / DDD从同一终端启动。 甚至我“显示环境”,这个环境也存在。
有人知道吗?
OS / Tools版本信息: RHEL Linux主机名1 2.6.32-754.3.5.el6.x86_64#1 SMP 2018年8月9日星期四11:56:22 EDT 2018 x86_64 GNU / Linux GNU gdb(GDB)7.12 gcc(GCC)6.3.0
答案 0 :(得分:1)
包括适当的头文件
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
将警告视为错误。
答案 1 :(得分:1)
即使我“显示环境”,这个环境也存在。
GDB调用您的程序时,它将启动一个新的 shell 来运行该程序。
当目标程序的环境发生变化时,通常这是外壳初始化文件(callClosure()
,~/.bashrc
等)更改环境的结果。
为非交互式shell更改环境是一个非常糟糕的主意。 Documentation关于如何避免这种情况。
答案 2 :(得分:0)
如果getenv返回NULL,则是因为找不到环境变量。但还是要小心如果if (strlen(a)>0)
失败,则该指令getenv(....)
变为非法。 getenv
发回NULL,此指令使程序崩溃。最好在执行此行if (strlen(a)>0)
->之前测试指针的有效性 ,但这不一定有用。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char * a = getenv("ANCHOR_STEM");
if( NULL != a ){
(void)puts(a);
return EXIT_SUCCESS;
}
(void)puts("none");
return EXIT_FAILURE;
}