Исключение определяется здесь:
class MyException : public std::system_error {
using std::system_error::system_error;
public:
const char* test () const throw () {
void * array[30000];
int nSize = backtrace(array, 30000);
char ** symbols = backtrace_symbols(array, nSize);
for (int i = 0; i < nSize; i++) {
std::cout << symbols[i] << std::endl;
}
free(symbols);
}
};
Брошено на привязку, когда другой процесс владеет портом:
if (errno = bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {
throw MyException(std::error_code(errno, std::generic_category()), "Bind failed");
}
Поймано здесь:
} catch (MyException& e) {
std::cout << "Caught system_error with code " << e.code()
<< " meaning " << e.what() << e.test() << '\n';
}
Когда вызывается e.test (), в конце трассировки стека возникает ошибка сегментации. Я полагаю, что это связано с символами char ** и backtrace_symbols, поскольку комментирование любого кода, который имеет дело с этим, удалит обратную трассировку. Я правильно использую эту функцию? Как правильно это сделать?