Вы можете взять копию репо и затем сохранить ваши изменения в копии. После этого вы можете сравнить обе папки в любом другом инструменте сравнения, например, не сравнивать и т. Д.
Вместо того, чтобы использовать постоянного клиента lock
& Monitor.Enter
подход для блокировки некоторых данных можно также использовать структуру 'TimedLock'. Этот TimedLock выдает исключение, если блокировка не могла бы быть получена своевременно, и он может также дать Вам предупреждение, если у Вас есть некоторые блокировки, которые Вы не выпускали.
Этот статья Ian Griffiths могла, возможно, помочь.
Можно использовать WinDbg для осмотра потоков в приложении. Вот краткий план того, что Вы могли сделать.
!threads
команда покажет Вам всем потоки в приложении и эти !clrstack
команда, покажет Вам, что они делают. Используйте ~e!clrstack
для дампа стека вызовов всех потоков. Ищите вызовы для Ожидания методов, поскольку они указывают на блокировку. !syncblk
команда даст Вам информацию того, какие потоки содержат различные блокировки. !dso
). Отсюда необходимо смочь найти блокировку, которую поток пытается получить. Разъяснение: WinDbg не требует регулярной установки. Просто скопируйте файлы. Кроме того, при взятии подвешивать дампа можно продолжить отлаживать на другой машине, раз так желаемой.
Дополнение: Sosex имеет эти !dlk
команда, которая автоматически определяет мертвые блокировки во многих ситуациях. Это не работает все время, но когда это делает, это делает всю работу для Вас, так, чтобы был Ваш предпочтительный вариант.
Конец в http://blogs.technet.com/askperf/archive/2007/06/15/capturing-application-crash-dumps.aspx говорится, что на Vista, по крайней мере, можно получить дамп катастрофического отказа рабочего процесса с помощью Диспетчера задач.
У Вас на самом деле есть очень интересная проблема там. Существует несколько вещей, которые можно сделать:
Использование хороший регистратор: Один из способа воспроизвести много ошибку потока состоит в том, чтобы иметь регистратор, который распечатает принятые меры и поток, который выполнил их, тот способ, которым можно найти трассировку руководствами Вы к ошибке. Это - довольно легкое решение, если можно добавить регистратор.
Использование FSP: Определите свою многопоточную систему с помощью FSP. Таким образом, Вы сможете создать конечный автомат процесса, который можно обойти до находки ошибку. Этим решением является более математическое решение.
два решения/процедуры я даю Вам, точно основные отличия приближения к многопоточной разработке между некоторым британским universitis и Amercian. В Великобритании преподаватели более добры, чтобы попытаться проверить их систему, не имеет никаких ошибок с помощью FSP, прежде чем они будут программировать его, и американцы предпочитают тестировать для проверки, они работают правильно, вопрос вкуса.
я действительно рекомендую прочитать эту книгу: Jeff Magee и Jeff Kramer: Параллелизм: Модели Состояния и Программы Java, Wiley, 1999
Это - очень интересная проблема и боль, потому что это только происходит каждые несколько дней. Я нашел эта статья о CodeProject. Это мог бы быть запуск для Вас.
старый школьный подход должен зарегистрировать тонну сообщений и использовать файлы журнала, чтобы попытаться обнаружить, когда он происходит. :)
В дополнение к ответам здесь, другая вещь, которую Вы нашли бы полезным с потоком, программирующим в целом, состоит в том, чтобы удостовериться, что Ваше dev поле является многопроцессорной машиной, мертвые блокировки в особенности (обычно) намного более надежно воспроизводятся.
Тайм-ауты в параллельном программировании - ужасная идея. Это приводит к недетерминизму и, следовательно, к поведению, которое невозможно воспроизвести. Попробуйте использовать инструмент обнаружения тупиковых ситуаций, например CHESS. Еще лучше минимизировать количество используемых блокировок с помощью алгоритмов без блокировок, или полностью отказаться от блокировок и разбить программу на однопоточные отсеки и использовать очереди для передачи данных между отсеками (более известный как передача сообщений/акторный параллелизм).