今天测试一个程序,突然出现一个 std::logic_error 错误,详细如下:
这个应该是 std::string 相关的一个错误,具体的错误信息还得用 GDB 跟踪一下了。
看第 8 栈帧已经是系统库里的东西了,第 9 帧是我本地的代码,于是只能查看代码了。
从函数调用栈上看,程序是在这个函数里崩溃的,一行行代码看下来,那只有getenv那两行代码可能存在问题了,这里用 getenv 返回的 char 指针构造一个 std::string,假如这个 getenv() 返回 NULL 指针,这个不就有问题了吗? man 了一个这个函数:
而我这个函数是跑一个 arm 板上的,所以这个环境变量可能就是没有,返回NULL指针了,于是在板子上看一下:
这个环境变量确实是空的,那问题就找到:用一个 NULL 指针去初始化 std::string ,产生了一个 std::logic_error,其实我们从抛出的异常里也可以看出一点端倪: