Я отлаживаю сервер с помощью Eclipse и Multi process GDB. Я использовал gSOAP 2.8 с SSL и WS-Security. Код в основном такой:
int main (void)
{
ServerClass Server;
...
//Configuration of server, SSL and WS-Security
...
if ( !Server.valid_socket(Server.bind() ) )
return EXIT_FAILURE;
while(1)
{
if ( Server.valid_socket(Server.accept() ) )
{
pid_t pid = fork();
if (!pid) //Child process
{
...
Server.serve(); //serves the client
...
Server.destroy(); //ends gsoap connection
return EXIT_SUCCESS;
}
else
{
Server.close_socket();
}
}
else
cout << "Socket invalid" << endl;
}
...
}
ServerClass - это класс, который включает в себя методы сервера и членов для его настройки. Сервер успешно обрабатывает клиентский запрос, возвращает EXIT_SUCCESS, но завершается неудачно. Отладчик показывает эту трассировку:
Thread[2] 3540 (Suspended : Signal : SIGSEGV: Segmentation Fault)
- std::ostream::flush() at 0xb7b9c0
- std::ios_base::Init::~Init() at 0xb7b5d81c
- 0xb7918121
- exit() at 0xb791817d
- __libc_start_main() at 0xb78fea8b
- _start() at 0x8143110
В чем может быть проблема? Спасибо.
Обновлено: я заменил
return EXIT_SUCCESS;
для
exit(EXIT_SUCCESS);
Код теперь работает нормально, но я не понимаю, почему не удается выполнить возврат. Какие-либо предложения?
Попробуйте Valgrind и rr.
Думаю, вам придется отменить свои изменения, пока у вас не будет минимально проверяемого примера. Похоже, что некоторые из ваших библиотек не содержат символов; и это может вам немного помочь.