Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在抛出“std::string”实例后调用terminate_C++_Exception Handling_Stack Trace - Fatal编程技术网

C++ 在抛出“std::string”实例后调用terminate

C++ 在抛出“std::string”实例后调用terminate,c++,exception-handling,stack-trace,C++,Exception Handling,Stack Trace,我有一个二进制文件,它通过抛出std:string类型的异常而崩溃 剥离二进制文件的堆栈跟踪: terminate called after throwing an instance of 'std::string' *** Aborted at 1309483487 (unix time) try "date -d @1309483487" if you are using GNU date *** PC: @ 0x3fb0c30155 (unknown) *** SIGABRT

我有一个二进制文件,它通过抛出std:string类型的异常而崩溃

剥离二进制文件的堆栈跟踪:

terminate called after throwing an instance of 'std::string'
*** Aborted at 1309483487 (unix time) try "date -d @1309483487" if you are using GNU date ***
PC: @       0x3fb0c30155 (unknown)
*** SIGABRT (@0xd54) received by PID 3412 (TID 0x40d03940) from PID 3412; stack trace: ***
    @       0x3fb180de70 (unknown)
    @       0x3fb0c30155 (unknown)
    @       0x3fb0c31bf0 (unknown)
    @     0x2aaaaab80cc4 (unknown)
    @     0x2aaaaab7ee36 (unknown)
    @     0x2aaaaab7ee63 (unknown)
    @     0x2aaaaab7ef4a (unknown)
    @           0x4c2622 XYZ::connect()
    @           0x4c3e0f XYZ::refresh()
    @       0x3fb18062f7 (unknown)
    @       0x3fb0cd1e3d (unknown)
现在的问题是,refresh函数确实尝试捕获std::string。它看起来像:-

bool XYZ::refresh() {
  try {
    connect();
  } catch (string& s) {
    return false;
  }
  return true;
}
你知道为什么它没有被抓住吗?或者我读取的堆栈跟踪错误了吗?

那就是


可能您没有重建所有源文件,或者您正在运行过期的可执行文件。

可能部分或所有模块在编译时没有-fno异常?有关如何更改异常行为的详细信息,请参阅

例如,以下短程序在抛出“std::string”实例后显示terminate called,如果:

包含foo的模块编译时带有-fno异常,并且 foo调用抛出std::string类型异常的东西所有其他模块都是使用-feexceptions编译的

正如所料

或者某个中间函数的抛出规范没有列出std::string

例如,此程序:

#include <string>
#include <iostream>

using namespace std;

int Hunc() throw(int); // can only throw int (?)

int main()
{
    try {
        Hunc();
    }
    catch (string& s) {
        std::cout << "caught it: \"" << s << "\"" << endl;
    }

    return 0;
}


int Hunc() throw(int)
{
    throw string("the string exception");
}

还显示在抛出“std::string”实例后调用的terminate。这两个例子都是在一个带有mingw4.5.1的Windows机器上测试的。

我会尝试捕获一个常量字符串&。为什么最后一个程序显示实例是std::string?应该是整数?!
caught it: "the string exception"
#include <string>
#include <iostream>

using namespace std;

int Hunc() throw(int); // can only throw int (?)

int main()
{
    try {
        Hunc();
    }
    catch (string& s) {
        std::cout << "caught it: \"" << s << "\"" << endl;
    }

    return 0;
}


int Hunc() throw(int)
{
    throw string("the string exception");
}