C ++ исключение с backstrace не распечатывает детали функции вызывающего - PullRequest
0 голосов
/ 13 июня 2018

У меня есть некоторый код исключения, как показано ниже

class BaseException : public std::exception {
    public:
        BaseException(string  str) : error_string(str){
            printStackTrace();
        }
        BaseException() = default;
        virtual ~BaseException() throw() = default;
        virtual const char *what() const throw(){return error_string.c_str();}
        void printStackTrace() {
            void *array[10];
            size_t size;
            size = backtrace(array, 10);
            backtrace_symbols_fd(array, size, STDERR_FILENO);
        }
        string error_string;
};    
void baz() {
    throw BaseException("tetsingException");
} 

void bar() { baz(); }
void foo() { bar(); }  

int main() {

    try{
        foo();
    }
    catch(BaseException &e){
        cout << e.what();
    }
    return 0;
}

Всякий раз, когда я запускаю это, я получаю ниже выходных

/home/user/sample/Debug/Exceptionwithstrace[0x4010c3]
/home/user/sample/Debug/Exceptionwithstrace[0x40104f]
/home/user/sample/Debug/Exceptionwithstrace[0x400eb5]
/home/user/sample/Debug/Exceptionwithstrace[0x400f1b]
/home/user/sample/Debug/Exceptionwithstrace[0x400f26]
/home/user/sample/Debug/Exceptionwithstrace[0x400f36]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5)[0x7fda68538f45]
/home/user/sample/Debug/Exceptionwithstrace[0x400da9]
tetsingException

имена функций не печатаются, мне нужно получить печать функцииНазовите также, как показано ниже, как получить что-то вроде ниже

/home/user/sample/Debug/Exceptionwithstrace[BaseException]
/home/user/sample/Debug/Exceptionwithstrace[baz]
/home/user/sample/Debug/Exceptionwithstrace[bar]
/home/user/sample/Debug/Exceptionwithstrace[foo]
/home/user/sample/Debug/Exceptionwithstrace[main]
...