Большинство ошибок довольно просты, легко воспроизводимы и легко отлаживаются. Что вы делаете, когда сталкиваетесь с теми, которые трудно или невозможно воспроизвести в отладчике, т.е. одним из этих ?
Наше приложение представляет собой многопоточное приложение, которое, кроме того, усложняется тем фактом, что оно взаимодействует с несколькими клиентами посредством удаленного взаимодействия, и иногда возникают ошибки, которые могут занять недели, а иногда мы даже не можем быть уверены, что проблема исправлена из-за ее противоречивой природы, возможно, это просто совпадение, что проблема давно не была замечена.
У нас уже есть система отчетов об ошибках, поэтому, если нам повезет и ошибка выдаст исключение, мы получим трассировку стека, но даже этого не всегда достаточно, потому что, например, из стека неясно, как получилось определенное значение быть нулевым (например). Это особенно верно, когда в рабочем потоке возникает исключение (как это происходит в большинстве случаев.
А потом у вас есть те, которые даже не генерируют исключения, это просто неожиданное поведение. Но это случается лишь в небольшом проценте случаев.
Это в .NET, поэтому некоторая часть работы с памятью и указателями скрыта, но у нас есть много сторонних компонентов, которые не являются управляемым кодом, и достаточное количество COM-взаимодействия, поэтому он все еще немного хитрый.
Очевидно, что нет простых ответов, так как я не спрашиваю о конкретной ошибке, но каковы общие принципы и тактики для решения таких проблем?