c++ - 是否存在使用 Purify 导致 SIGABRT 在 g++ 中抛出异常的已知问题?

标签 c++ crash g++ purify

实际上,我真正的问题是:以下代码中指示的行是否有任何问题(“原因SIGABRT”):

char* myFunc(char *param) {
  char* leaked = new char[80]; // Intentionally leaked
  if (param == NULL) throw logic_error("Parameter was null!"); // Causes SIGABRT
  strcpy(leaked, param);
  // Missing return, but never gets this far, so should be okay.
}

void test_non_happy_myFunc()
{
  try {
    myFunc(NULL);
  } catch (logic_error&) {
    cout << "Test succeeded!" << endl;
    return;
  }

  cout << "Test FAILED!" << endl;
}

int main()
{
  test_non_happy_myFunc();
}

我正在尝试提出一个最小的测试用例以发送给 IBM/Rational 以证明他们的净化软件存在问题,所以我由 S.O. 运行它。社区第一。是的,我故意在第二行泄漏内存,是的,我知道在抛出异常时指针“泄漏”被初始化。

上面的代码在使用 g++ 编译时在 purify 外部正常运行,但在 purify 内部运行时导致核心转储。我是否在上面的代码中犯了一个新手错误(让 SIGABRT 成为我的错),或者我可以将矛头指向 IBM/Rational Purify?

编辑:(澄清)

在没有purify的情况下在命令行运行,以上完整程序打印:

Test succeeded!

在净化内部运行,净化报告:

COR: Fatal core dump
This is occurring while in thread 1299:
        _p450static    [rtlib.o]
        abort          [libc.so.6]
        uw_init_context_1 [unwind-dw2.c:1256]
        _Unwind_RaiseException [unwind.inc:88]
        __cxa_throw    [eh_throw.cc:78]
        myFunc(char*)  [exception_test.cc:9]
        test_non_happy_myFunc() [exception_test.cc:17]
        main           [exception_test.cc:28]

请注意,在包含先决条件等之后,第 9 行最终成为我指定的行。

最佳答案

除了 myFunc 中缺少 return 语句外,我没有发现上述代码有任何错误。但是,在将责任归咎于其他人(尤其是广泛使用的代码)之前,我会仔细检查在此之前没有发生任何不好的事情(如您所知,如果在一百万条执行指令之前召唤 UB 守护进程的东西仍然有可能,只有现在才会有可见效果)。

只有当仅使用 main 调用 test_non_happy_myFunc 并且没有自定义全局分配器等花哨的东西仍然显示问题时,我才会将搜索转移到您的工具(即纯度、编译器、等),并且在 100% 肯定问题存在之前我不会停下来。

关于c++ - 是否存在使用 Purify 导致 SIGABRT 在 g++ 中抛出异常的已知问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4879376/

相关文章:

c++ - 如何将 Boost 线程池从 fifo 转换为优先级?

java - Color.parseColor 抛出错误并且应用程序崩溃

iOS 应用程序崩溃 - dyld : Library not loaded: @rpath/GTMSessionFetcher. 框架/GTMSessionFetcher

android - Activity 关闭后会导致异步任务结果并导致崩溃

c++ - 这里如何正确使用for_each?

c++ - 未为使用默认模板参数声明的别名模板指定模板参数时出错

c++ - 动态分配内存以存储使用 WinHttpReadData 下载的 HTML 源

c# - 什么相当于C#中的map of maps

c++ - 编译后更改 Linux 共享库(.so 文件)版本

c++ - 无法插入到 std::map (G++)