Лично я хотел бы максимально сузить его до определенного раздела кода. Например, у меня только что был один. Странно было то, что это происходило только на машине, которую я не мог отладить напрямую.
У меня было два потока, работающих параллельно, поэтому я остановил запуск одного потока (или вы можете отменить его распараллеливание).
Затем я просмотрел свои функции и добавил функции распечатки, такие как:
Как только функция запускается:
Console.WriteLine("<Enter method: {0}", DebuggingHelper.GetCurrentMethod());
Непосредственно перед возвратом функции:
Console.WriteLine(">Exit method: {0}", DebuggingHelper.GetCurrentMethod());
Где GetCurrentMethod определяется как:
[MethodImpl(MethodImplOptions.NoInlining)]
public static string GetCurrentMethod()
{
StackTrace st = new StackTrace();
StackFrame sf = st.GetFrame(1);
return sf.GetMethod().Name;
}
Затем я запускаю его, может быть, я добавляю не все функции, но достаточно, чтобы сузить место, где это происходит в коде. Затем в этом разделе добавьте еще.
Вы также можете добавить контрольную точку, поскольку она проходит через определенные методы.
Затем запустите его снова, и вы обнаружите, что между этими операторами будет возникать исключение StackOverFlow. Продолжайте сужаться, пока не найдете его.
Довольно просто и быстро найти, где это происходит таким образом.