进行库调用时 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 中有没有地方可以检查程序发生了什么(为什么会死,等等)....

【问题讨论】:

什么是endlogtauloginfologgenerictauloginfo 在哪里初始化/声明? 它们已经在头文件中定义了。我想它们没有问题,因为我正在使用它们写入我的日志文件 如何编译和链接程序和库?最好发MCVE 【参考方案1】:

我解决了这个问题。这是我的一个愚蠢的错误。 尽管我用新函数编译了库,但我没有将它添加到测试环境中。 测试环境有旧版本的库,没有新的函数API

但是很惊讶函数调用没有使程序崩溃,或者显示任何问题的迹象

【讨论】:

以上是关于进行库调用时 C++ 程序死机的主要内容,如果未能解决你的问题,请参考以下文章

出错时停止代码执行 (C++)

如何获得涉及 C++ 标准库的帧指针性能调用堆栈/火焰图?

C#总结调用C++动态库

从 C++ 调用共享库

从 C++ 中的共享库调用指向列表的静态指针

C++ 调用 C++ 库函数但执行了错误的函数