Мне было интересно, какие существуют методы определения кода, реализующего определенную функцию, в настольном приложении.
Я младший разработчик, только с профессиональным опытом программирования, лежащим в области веб-программирования. В Интернете это проще сделать. Например, вы «осматриваете» кнопку с помощью инструментов браузера и можете видеть, что делается, когда вы нажимаете на нее. И затем, предполагая, что у вас есть полный исходный код, вы можете детализировать иерархию вызовов.
Но как вы делаете это в настольных приложениях? По крайней мере, без необходимости погружаться в полную кодовую базу?
debugging
desktop-application
py_script
источник
источник
Ответы:
Трассировка назад
Обратная трассировка находит конечную точку для события, связанного с этой функцией (см. Ниже). Оказавшись там, точка останова помещается в отладчик. Функция срабатывает и когда останавливается отладчик. Стек вызовов проверяется для отслеживания пути вызова. Прогуливаясь вверх по стеку вызовов, вы можете делать заметки о переменных состояниях или устанавливать новые точки останова для повторной проверки события.
Функция снова запускается, и отладчик останавливается на новых точках останова. Затем вы можете повторить обратную трассировку или выполнить прямую трассировку пока цель не будет найдена.
За и против
Обнаружение конечной точки
Для отладки функции вы должны знать, где в исходном коде достигнута конечная цель. Только с этого момента вы можете трассировку , чтобы увидеть , как код попал. Пример; Чтобы понять, как выполняется отмена. Вы знаете, где в коде все отменено, но вы не знаете, как это происходит . Это было бы кандидатом на обратный путь, чтобы выяснить, как работает эта функция.
Прямая трассировка
Прямая трассировка определяет начальную точку для события, связанного с объектом (см. Ниже). Оказавшись там, сообщения регистрации вставляются в исходный код или устанавливаются точки останова. Этот процесс повторяется, когда вы продвигаетесь дальше от начальной точки, пока не найдете цель для функции.
За и против
Начальная точка Discovery
Вы можете использовать ключевые слова, идентификаторы интерфейса пользователя (идентификаторы кнопок, имена окон) или легко найти прослушиватели событий, связанные с этой функцией. Например, вы можете начать с кнопки, используемой для запуска функции отмены .
Процесс ликвидации
Вы можете думать об этом как о средней точке по сравнению с начальной и конечной точкой . Вы выполняете процесс ликвидации , когда вы уже знаете кусок кода используется в функции, но это ни начало или конец функции.
Направление от средней точки зависит от количества входов и выходов. Если фрагмент кода используется во многих местах, то обратное отслеживание с этой позиции может занять очень много времени, так как все они должны быть проверены. Затем вы применяете процесс исключения, чтобы сократить этот список. В качестве альтернативы вы можете выполнить прямую трассировку с этой точки, но, опять же, если фрагмент кода разветвляется во многих местах, это также может быть проблемой.
Вы должны уменьшить направления положения, не следуя путям, которые явно не будут выполняться для объекта. Переходя мимо этого кода и устанавливая точки останова только там, где он, скорее всего, связан с этой функцией.
Отладка средней точки часто требует более продвинутых возможностей IDE. Способность видеть иерархию кода и зависимости. Без этих инструментов это сложно сделать.
За и против
источник
Предполагая, что эта функция привязана к некоторому интерфейсу пользователя, например, к кнопкам или меню, я обычно выполняю следующие действия (очень утомительно, но работает). Это просматривает исходный код, не используя отладчик .
SUPER_BUTTON_3 = "Super Feature X3"
. Для дальнейшего использования запомните это имя файла.Как заметил @amon, иногда отладчик проще ...
источник
Если вы вообще можете найти какой-либо связанный код, вы можете использовать программное обеспечение контроля версий, чтобы показать вам весь коммит или близлежащие коммиты, которые его добавили. Это должно показать вам все, что требуется для реализации этой функции.
Один из простых способов найти начальную точку поиска - поиск по тексту на кнопке.
Часто люди помещают идентификатор проблемы из своего трекера в свои сообщения коммита. Если вы можете найти проблему, описывающую запрос функции, тогда вы можете искать коммиты с этим идентификатором проблемы.
источник