Один из лучших способов решения проблемы такого типа (когда она, по-видимому, не может быть надежно воспроизведена) - это вставка регистрационного кода в различные области, где, как вы ожидаете, происходят определенные события. Записывайте места, где могут возникнуть ошибки, записывайте, какие значения вы ожидаете, и что у вас есть, и т. Д. Затем попробуйте, попробуйте, попробуйте, пока не сможете воспроизвести ошибку.
В отличие от ранее, теперь у вас есть журнал, чтобы посмотреть и увидеть, где что-то пошло не так. Если что-то все равно выглядит правильно, вставьте еще код регистрации в другом месте. Если вы видите, что что-то идет не так, но не понимаете этого, поместите больше кода регистрации в эту область и продолжайте сужать проблему.
Надеюсь, это приведет к появлению новых гипотез о том, как происходит ошибка, и вы сможете надежно воспроизвести ее в отладчике и исправить ее!
Как упоминалось в Duffymo, преступник мог бы быть многопоточным, и это было бы хорошим местом для начала, если вы сознательно используете несколько потоков.