У вас есть мои симпатии: очень сложная проблема для отслеживания.
Как вы обычно говорите, это происходит за некоторое время до сбоя, как правило, в результате неправильной записи (например, запись в удаленную память,запуск в конце массива, превышение выделенной памяти в memcpy и т. д.).
В прошлом (в Linux, я полагаю, вы работаете в Windows), я использовал инструменты для проверки кучи (valgrindОчистите, инспектор Intel) но, как вы заметили, они часто влияют на производительность и, таким образом, скрывают ошибку.(Вы не говорите, является ли это многопоточным приложением, или обрабатывает набор переменных данных, таких как входящие сообщения).
Я также перегружал операторы new и delete для обнаружения двойного удаления, но это довольноспецифическая ситуация.
Если ни один из доступных инструментов не поможет, то вы сами по себе, и процесс отладки будет долгим.Лучший совет для этого, который я могу предложить, - поработать над сокращением сценария тестирования, который будет воспроизводить его.Затем попытайтесь уменьшить объем исполняемого кода, т. Е. Заглушить части функциональности.В конце концов, вы сосредоточитесь на проблеме, но я видел, как очень хорошие ребята потратили 6 недель или больше, отслеживая их в большом приложении (~ 1,5 млн. LOC).
Всего наилучшего.