>Программа написана на C++.
В таком случае весьма вероятно, что всё дело в деструкторах,
отрабатывающих при выходе из main(). То бишь в одном из них
происходит подвисание.
Проведите простеёший эксперимент: перенесите весь код
из main в какой-нибудь main_impl(), а из main()
оный main_impl() вызовите. Нечто вроде
#include <stdio.h>
static int main_impl(int argc, char* argv[])
{
// Код из прежнего main()
}
int main(int argc, char* argv[])
{
printf("-- before main_impl()\n"); fflush(stdout);
int rcode = main_impl(argc, argv);
printf("-- after main_impl()\n"); fflush(stdout);
return rcode;
}
Если "after" не печатается, значит, деструктор.
Если печатается и программа виснет уже на 'return rcode',
значит, вся беда в некоем exit handler'е.
>А что такое GDB? (извините мою неосведомлённость...)
Отладчик, вестимо. Работающий под практически любой UNIX-подобной
системой. http://www.gnu.org/software/gdb
>С отладкой многопоточных приложений... пока не знаком...
Неправду глаголите, ибо отладкой как раз и занимаетесь.
Только без нужных инструментов, вручную, как в каменном веке :)
>Потоки закрываются (это было проверено в первую очередь)...
Значит, собственно потоки и ни при чём совсем.
>Как можно проверить ""очистные" процедуры"?
Если таковые в программе используются, то можно
а) просмотреть их код
б) вставить в оный код печать
;-)
>Деструкторы выполняются...
Выполняются - хорошо, но завершаются ли?
>Может что-то происходит со стеком во время выполнения приложения
>и потому return становиться не возможным?.. Но, к сожалению,
>я ещё не настолько продвинутый программер... и не знаю, что
>может повлиять на стек... тем более функции main...
>Может, чего подскажите...
Может. Сие называется порчей стека; причиной порчи стека обычно
является неправильное обращение с указателями. Обнаружить порчу
стека post factum можно с помощью `bt` в отладчике, собственно
некорректные операции с памятью прилично ловит valgrind
http://valgrind.kde.org/.
Стек функции main() есть стек ведущего потока программы и ничем
особенным среди стеков прочих потоков не выделяется.