【问题标题】:C++ program dies when making a library call进行库调用时 C++ 程序死机
【发布时间】: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

标签: c++ unix solaris coredump


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    • 2021-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-10
    • 2013-09-19
    相关资源
    最近更新 更多