Ответ 1
Несколько вариантов для решения этой проблемы:
Вы можете попытаться установить контрольную точку аппаратного обеспечения на адрес стека до того, как произойдет повреждение, и надейтесь, что отладчик достаточно рано сломается в коррупции, чтобы обеспечить смутно полезное состояние отладки. Трудная часть здесь - выбор правильного адреса стека; в зависимости от того, насколько случайным является "выбор" оскорбительной нити, это может быть непрактично. Но из одного из ваших комментариев это звучит так, будто часто создаваемый поток разбивается, поэтому это может быть выполнимо. Попытайтесь сломаться во время создания потока, захватите местоположение стека потоков, сметете на какую-то дикую догадку, установите аппаратное BP и продолжайте. Исходя из того, ломаетесь ли вы слишком рано, слишком поздно или совсем нет, отрегулируйте смещение, полоскание и повторите. Это, в основном, предварительная догадка и проверка, и она может быть сильно затруднена или совершенно непрактична, если шаблон коррупции слишком случайный, но удивительно, как часто это может привести к полуразборчивому стеку и успешным усилиям по отладке.
Другой вариант - начать сбор дампов аварий. Попробуйте найти шаблоны между дампами сбоев, которые могут помочь вам приблизиться к источнику коррупции. Возможно, вам повезет, и одна из аварийных дампов столкнется "быстрее" / "ближе к источнику".
К сожалению, обе эти технологии - больше искусства, чем наука; они не детерминированы, полагаются на здоровую дозу удачи и т.д. (по крайней мере, на моем опыте... что, как говорится, есть люди, которые могут делать удивительные вещи со свалками, но это занимает много времени чтобы достичь этого уровня мастерства).
Еще одна сторона примечания: как указывали другие, неинициализированная память является очень типичным источником отладочных версий vs release и может быть легко вашей проблемой. Однако, еще одна возможность иметь в виду разницу во времени. Порядок, в котором потоки планируются и долгое время, часто резко отличается от debug vs release и может легко привести к ошибкам синхронизации, которые маскируются в одном, но не в другом. Эти различия могут быть вызваны различиями в скорости выполнения, но я думаю, что некоторые временные ряды преднамеренно нарушают планирование потоков в среде отладки.