Насколько я знаю, там четыре платформы, доступные для поблочного тестирования с.NET в эти дни
NUnit всегда отсутствовал впереди, но разрыв закрылся в прошлом году или около этого. Я все еще предпочитаю NUnit сам, тем более, что они добавили быстрый интерфейс некоторое время назад, который делает тесты очень читаемыми.
, Если Вы просто начинаете с поблочным тестированием он, это, вероятно, не имеет большого значения. Как только Вы до скорости, Вы будете в лучшем положении для оценки, какая платформа является лучшей для потребностей.
Где переполнение стека из заголовка вашего вопроса? Нарушения доступа обычно указывают на недопустимое разыменование указателя.
Используйте историю изменений, чтобы найти первую версию, в которой все начало происходить бум , затем критически проанализируйте все элементы указателя, происходящие внутри и вокруг кода, измененного в этой версии .
В Visual Studio есть возможность где-то сломаться при первом исключении (не помню, где именно, возможно пункт меню исключения в подменю отладки?) Вы хотите включить это и смотреть на свои стеки вызовов в тот момент, когда они возникают.
Существует также возможность включить Microsoft Symbol Server, который будет автоматически загружать совпадающие символы для любой системной dll, которую вы случайно видите в стеке. (извините, я тоже не помню, как именно это было настроено).
Я буду использовать свои психические навыки отладки и сообщите вам, что вы перезаписываете буфер, который живет в стеке - в частности, вы пишете слишком много нулей в буфер, который не достаточно большой, чтобы удержать его.
У вас есть классические симптомы разбитого стека - первый AV, который вы попадаете, пытается получить доступ к нулю минус несколько байтов - четко смещение от вашего указателя стека в ваши параметры или ваши локальные переменные. (Я никогда не могу помнить, какие из них выше указателя стека, и какие из них ниже.) Затем у вас есть куча строк, которые указывают на указатель инструкции, был установлен на ноль, что часто происходит, потому что адреса возврата функций в рамках стека был перезаписан нулевыми значениями - потому что вы перезаписали буфер на основе стека и повредил все остальные важные вещи на стеке. По мере того, как ваша программа пытается вернуться из текущей функции, она смотрит в стеке, чтобы увидеть, откуда он думает, из-за нуля и прыгает прямо там. Упс!
Так как ваш стек разбит, вы не можете найти трассировку стека слишком полезным; Ваши рамки стека могут быть повреждены этим моментом.