进行库调用时 C++ 程序死机
Posted
技术标签:
【中文标题】进行库调用时 C++ 程序死机【英文标题】:C++ program dies when making a library call 【发布时间】:2014-12-11 08:37:20 【问题描述】:我是 C++ 新手。我在库中添加了一个新方法(它是一个打印日志并返回的简单方法),并成功编译它。 然后我尝试从我的程序中调用该方法。尝试调用该函数时,程序在没有任何警告的情况下死亡。没有要调试的核心转储。
(程序在不调用这个函数的情况下运行良好,我试了一下,kill -s SIGSEGV $pid,此时生成core dump,所以生成core dump没有问题)
由于程序死了,我也不能使用 pstack。我的调试日志表明对库的调用永远不会返回。我在库中的调试日志也没有打印出来。
也没有空指针问题,因为我在调用库函数之前检查空指针
/* My Library function */
void EasyTaskScheduler::test1()
tauloginfo << "inside test1" << endlog;
/* library call */
if (mapper == NULL)
loggeneric << __FILE__ << "," << __LINE__ << "Is null:" << endlog;
return -1;
else
loggeneric << __FILE__ << "," << __LINE__ << "Im not NULL" << endlog;
easyTaskScheduler->test1();
loggeneric << __FILE__ << "," << __LINE__ << "Test function returns: " << endlog;
return 0;
我看到的最后一条日志是“Im not NULL” 程序就死了。 任何人都可以提示可能是什么问题。 在没有管理员权限的情况下,solaris 中有没有地方可以检查程序发生了什么(为什么会死,等等)....
【问题讨论】:
什么是endlog
、tauloginfo
和loggeneric
? tauloginfo
在哪里初始化/声明?
它们已经在头文件中定义了。我想它们没有问题,因为我正在使用它们写入我的日志文件
如何编译和链接程序和库?最好发MCVE
【参考方案1】:
我解决了这个问题。这是我的一个愚蠢的错误。 尽管我用新函数编译了库,但我没有将它添加到测试环境中。 测试环境有旧版本的库,没有新的函数API
但是很惊讶函数调用没有使程序崩溃,或者显示任何问题的迹象
【讨论】:
以上是关于进行库调用时 C++ 程序死机的主要内容,如果未能解决你的问题,请参考以下文章