Начну с того, что считаю превосходным:
Трудно найти ошибки обычно возникают при относительно редких обстоятельствах. В конце концов, если программа перезагружает вашу систему при каждом запуске, вы обычно исправляете эту ошибку. Некоторые из этих редких случаев вызваны выполнением пути кода, который никогда ранее не выполнялся. Когда ваша программа запускается впервые, вы обычно создаете несколько объектов. У вас есть путь к коду, который вы выбираете, если эти конструкторы генерируют исключения, но когда-нибудь они терпели неудачу?
Если нет, значит, произошел несчастный случай. Что на самом деле делает ваша программа, когда этот конкретный конструктор дает сбой? Пока вы не протестировали путь к коду, вы еще не полностью протестировали свою программу. Убедитесь, что вы используете каждый путь кода. Если у вас есть «if () ... else ...» и вы всегда выполняли часть «else», то часть «if» - это ошибка, ожидающая своего появления.
Существует очень простой способ справиться с этим, и сделайте это таким образом, который поможет вам при первом запуске кода. Прелесть использования ловушек в том, что она помогает вам немедленно, так что вы быстро обнаружит, что вы автоматически вставляете их при написании кода.
Это состоит из двух методов, trap () и trap (bool) - я включил примеры Java, C ++ и ассемблера в, но для иллюстрации я буду использовать C # здесь. То, что делает ловушка, это бросает вас в отладчик, когда вы нажимаете одну. Сначала пример, а затем, почему это так полезно
// Open an XML file
XmlReader reader;
if (string.IsNullOrEmpty(username)) {
Trap.Trap();
reader = XmlReader.Create(filename, xmlSettings);
} else {
Trap.Trap(!hasDomain);
Trap.Trap(hasDomain);
XmlUrlResolver resolver = new XmlZipResolver();
resolver.Credentials = hasDomain ? new NetworkCredential(user, password, domain) : new NetworkCredential(user, password);
xmlSettings.XmlResolver = resolver;
reader = XmlReader.Create(filename, xmlSettings);
}
Немедленная выплата
Почему это большая помощь с самого начала? Потому что это поможет вам один раз пройти по каждой части кода. В приведенном выше коде вы, вероятно, сначала тестируете без имени пользователя, поэтому попадете в отладчик с первой ловушкой. Вы отмечаете это и затем перешагиваете через Create. Вы можете сделать один шаг после нескольких строк, чтобы убедиться, что xml хорош, и тогда вы идете.
Примечание: способ пометить ловушку, в которую я попал, - поставить ** в начале этой строки. Когда я закончу сеанс отладки, простая компиляция покажет мне каждое место, где я добавил *. Поскольку я добавляю * к той же строке, номера строк остаются прежними, и отладчик корректно соответствует вашей исходной строке (если вы удаляете строку с ловушкой, когда нажимаете ее, отладчик будет отключен на одну строку где-нибудь еще ниже в этом файле).
Итак, вы работали над этим модулем в течение нескольких дней, все работает хорошо, и вы решили попробовать XML-файл, требующий учетных данных. Когда вы это сделаете, отладчик остановится на вершине остального. Затем вы шагаете по коду, открывая файл XML с учетными данными. Прелесть этого подхода в том, что вам не нужно помнить, что вы не прошли через эти 4 строки кода. Вам не нужно искать эти 4 строки кода. Это просто уронит вас туда в отладчике. Я думаю, что это один из самых мощных инструментов отладки, которые я использую , потому что теперь я легко делаю шаг за шагом каждую строку своего кода - и нахожу достаточно проблем из этой практики, чтобы оно того стоило.
Вторичная выплата
Эта практика также дает вторую большую отдачу. Первоначально все удаленные ловушки являются либо очень распространенными путями кода, либо путями, которые специально попадают из-за модульного тестирования. Поэтому, когда вы «закончили» с модулем и все ваши тесты написаны, все оставшиеся ловушки являются индикаторами тестов, которые еще предстоит написать. Теперь у вас есть очень простой способ определить оставшиеся модульные тесты, которые нужно написать.
И ловушки реализованы так, что они запускаются только при отладочной сборке. Таким образом, вы можете отправлять код с ловушками (мы не должны, но мы все делаем), и это не повлияет на версию выпуска.
Код прерывания для C #, Java, C ++ и ассемблера доступен на Одна из самых мощных практик отладки