Трассировка назад
Обратная трассировка находит конечную точку для события, связанного с этой функцией (см. Ниже). Оказавшись там, точка останова помещается в отладчик. Функция срабатывает и когда останавливается отладчик. Стек вызовов проверяется для отслеживания пути вызова. Прогуливаясь вверх по стеку вызовов, вы можете делать заметки о переменных состояниях или устанавливать новые точки останова для повторной проверки события.
Функция снова запускается, и отладчик останавливается на новых точках останова. Затем вы можете повторить обратную трассировку или выполнить прямую трассировку пока цель не будет найдена.
За и против
- Всегда легче пройтись по стеку вызовов и посмотреть, как вы куда-то попали.
- Могут быть миллионы условий, которые должны быть выполнены до достижения конечной точки. Если вы уже знаете конечную точку, вы сэкономили много работы.
- Если функция не работает. Вы можете никогда не достичь конечной точки, и время может быть потрачено впустую, пытаясь выяснить, почему.
Обнаружение конечной точки
Для отладки функции вы должны знать, где в исходном коде достигнута конечная цель. Только с этого момента вы можете трассировку , чтобы увидеть , как код попал. Пример; Чтобы понять, как выполняется отмена. Вы знаете, где в коде все отменено, но вы не знаете, как это происходит . Это было бы кандидатом на обратный путь, чтобы выяснить, как работает эта функция.
Прямая трассировка
Прямая трассировка определяет начальную точку для события, связанного с объектом (см. Ниже). Оказавшись там, сообщения регистрации вставляются в исходный код или устанавливаются точки останова. Этот процесс повторяется, когда вы продвигаетесь дальше от начальной точки, пока не найдете цель для функции.
За и против
- Это самая легкая отправная точка для поиска функции.
- Сложность кода снижает эффективность прямой трассировки. Чем больше условий в коде, тем больше вероятность, что вы пойдете в неверном направлении.
- Прямое отслеживание часто приводит к установке точек останова, которые будут вызваны несвязанными событиями. Прерывание процесса отладки и вмешательство в ваш поиск.
Начальная точка Discovery
Вы можете использовать ключевые слова, идентификаторы интерфейса пользователя (идентификаторы кнопок, имена окон) или легко найти прослушиватели событий, связанные с этой функцией. Например, вы можете начать с кнопки, используемой для запуска функции отмены .
Процесс ликвидации
Вы можете думать об этом как о средней точке по сравнению с начальной и конечной точкой . Вы выполняете процесс ликвидации , когда вы уже знаете кусок кода используется в функции, но это ни начало или конец функции.
Направление от средней точки зависит от количества входов и выходов. Если фрагмент кода используется во многих местах, то обратное отслеживание с этой позиции может занять очень много времени, так как все они должны быть проверены. Затем вы применяете процесс исключения, чтобы сократить этот список. В качестве альтернативы вы можете выполнить прямую трассировку с этой точки, но, опять же, если фрагмент кода разветвляется во многих местах, это также может быть проблемой.
Вы должны уменьшить направления положения, не следуя путям, которые явно не будут выполняться для объекта. Переходя мимо этого кода и устанавливая точки останова только там, где он, скорее всего, связан с этой функцией.
Отладка средней точки часто требует более продвинутых возможностей IDE. Способность видеть иерархию кода и зависимости. Без этих инструментов это сложно сделать.
За и против
- Средние точки часто являются первым кусочком кода, который всплывает в вашей голове, когда вы думаете об этой функции. Вы говорите себе: «Ах, это должно использовать XXXX, чтобы работать».
- Средние точки могут выявить начальные точки легче всего.
- Средние точки могут быть простым способом найти след к объекту, если он потерян из-за синхронизации или изменения потоков.
- Средние точки могут привести вас к коду, с которым вы не знакомы. Стоит вам времени, чтобы узнать, что происходит.