Во время разработки нашего приложения мы, в частности, столкнулись с очень неприятной ошибкой. Симптом довольно прост, что процесс исчезает. Журналы просто внезапно заканчиваются, никаких аварийных дампов или чего-либо еще не может быть найдено, никаких процессов зомби не существует. Доктор Ватсон ничего не заметил, оставив нас без следа.
Ошибка не просто воспроизвести, для воспроизведения этой ошибки требуется в среднем 3-4 часа, повторяя одни и те же действия. Так что где-то есть какое-то состояние гонки. У нас есть специальные функции, обрабатывающие как SEH, так и обычные исключения, поэтому ни одна из них не должна остаться незамеченной.
Отладка должна выполняться на специальном компьютере, потому что он работает на очень специализированном оборудовании. Так что доступна только удаленная отладка. И когда удаленная отладка подключена, C ++ builder не заметил, что приложение отсутствует, и аварийно завершает работу, когда мы пытаемся выполнить любую отладку на несуществующем процессе.
Мы используем большое разнообразие технологий с этим программным обеспечением:
- OpenGL
- Directshow + некоторые фильтры COTS
- COM / DCOM
- Последовательные COM-порты для связи со специализированным оборудованием
- C ++ Builder (который использует другие стековые рамки, чем VC ++)
Итак, как вы понимаете, мне не с чем здесь работать. Что я делаю сейчас, так это то, что я пытаюсь сузить его, войдя в разные места кода, чтобы найти, есть ли в коде конкретная точка, в которой возникает ошибка. Я также пытаюсь удалить как можно больше аспектов действия, которое я выполняю, чтобы сделать кейс как можно более простым. Но это действительно сложная операция, и этот процесс занимает много времени, а время (как обычно) является дефицитным ресурсом.
Мне интересно, есть ли у кого-нибудь хорошие советы для меня, либо по причине (вообще, что вызывает процесс просто останавливаться без какого-либо уведомления), либо по методам отладки такого неуловимого сбоя?