Как точно определить, что именно делает программное обеспечение, когда оно застряло, не реагирует на ввод пользователя и не обновляет свой дисплей?
Я попробовал oprofile, который записывает, какую функцию выполняет, но он не дает мне достаточно подсказок. Он считает все, что происходит во время его работы, когда мне нужно видеть, что происходит, только когда программа-образец зависла.
Проблема может включать прерывания, ожидание сетевых сокетов, таймеры, обработчик событий графического интерфейса или кто знает что. Как узнать как можно больше о том, что происходит, а не только о точках выполнения каждого потока?
Интересующее программное обеспечение работает на Linux, построенном с использованием gcc, в основном C ++, но может включать и другие языки, включая интерпретируемые, например. Python.
Особый случай сейчас вызывает Firefox, для которого я проверил источник. Firefox приостанавливает весь ввод и вывод на экран в случайное время, часто, примерно на 5-10 секунд каждый раз. Даже если кто-то передаст мне решение этой конкретной проблемы на серебряном блюде, конечно, я возьму его, но все равно буду спрашивать. Если возможно, я бы хотел изучить общие приемы, применимые к любому программному обеспечению, особенно то, за что я отвечаю.