Каковы хорошие методы для сохранения вашего места в коде?

21

Я понимаю, как использовать закладки, чтобы запомнить одну точку в вашем коде. Тем не менее, как можно отслеживать поток кода, который они исследуют? Например: несколько закладок и порядок, в котором они были сделаны.

Пример:

  1. Сообщение об ошибке: «Столкновения не работают на углах стен»

    1. Воспроизведение ошибки приводит к тому, что определенные полигоны не сталкиваются.
    2. Код столкновения был написан недоступным разработчиком. Так что расследование идет примерно так:

Схема потока

Во время расследования, особенно при рассмотрении не кодовых элементов, таких как Google, можно разумно ожидать, что они потеряют свое место в коде ( я уже смотрел на этот путь к коду? Или какой путь к коду я изучал? к этой функции и т. д.). То же самое касается неизбежных прерываний (Босс: мне нужно [Длительный бессмысленный отчет] СЕЙЧАС и т. Д.)

Было бы полезно иметь ресурс методов или инструментов для обеспечения возможности отслеживать свое место в коде.


Изменить : приведенный выше пример является потенциальной иллюстрацией, а не фактической проблемой, требующей ответа.

Другой способ сформулировать этот вопрос:

При изучении новой системы, как вы отслеживаете, где вы находитесь в изучении кода? Речь идет не о понимании того, почему код делает то, что он делает (для чего нужны комментарии), а о том , как он это делает (что можно узнать только путем чтения кода, а не комментариев).

Джесс Телфорд
источник

Ответы:

14

Интерфейс пузырьков пытается решить эту проблему, показывая сразу несколько битов кода. (Вы застряли в своем браузере для Google). Это выглядит потрясающе, но я не пробовал. Эта версия идеи является реализацией Visual Studio для Visual Studio Ultimate.

PSR
источник
+1, так как это практичное и готовое решение проблемы. (Это также просто круто!)
Джесс Телфорд,
Одна из вещей, которые я придумал в моей голове несколько лет назад, просто чтобы узнать, что она уже существует :( +1
phresnel
похоже на то, что вы можете делать в Squeak и других Smalltalks, где вы открываете новые окна просмотра кода и можете переходить к любым методам / классам, которые вы хотите использовать в них.
Рудольф Олах
довольно круто ... Я создал небольшое игрушечное приложение, которое аналогичным образом обеспечивает визуализацию вашего интернет-браузера (когда вы нажимаете на ссылки, новый узел будет добавлен и связан с источником). Никогда не думал о применении этого для визуализации кода.
Майкл Браун
12

Помимо всех упомянутых замечательных технологий, я обнаружил, что старомодный лист бумаги А3 является отличным помощником в этих вопросах. Запишите свои идеи и организуйте их в стиле mindmap.

thiton
источник
Да да. Лучший ответ на сегодняшний день.
Патрик Хьюз
10

И мой редактор, и отладчик могут переходить к определению функции и иметь многоуровневую кнопку «назад», например, веб-браузер, чтобы вернуться туда, где я был раньше. Обычно этого достаточно для отслеживания сложного процесса отладки. Это также помогает иметь контроль над исходным кодом, который позволяет вам много совершать . Это дает мне сообщение коммита, объясняющее, почему я что-то пытаюсь, а также быстрый способ отменить изменения, если они не работают. Помимо этого, простая доска для перечисления потенциальных и изученных потенциальных клиентов заполняет все оставшиеся для меня пробелы.

Карл Билефельдт
источник
1
Очень практично Я не думал об использовании управления исходным кодом таким образом.
Джесс Телфорд
Какой редактор и отладчик?
Джон Гейнс-младший
MULTI отладчик Vim и Green Hill.
Карл Билефельдт
В Visual Studio это CTRL + - для возврата и CTRL + = для перехода вперед.
VitalyB
Eclipse может показывать определение текущего символа под курсором на отдельной панели.
3

Несколько способов, которыми я отслеживаю:

  • Запишите это . У вас встреча через две минуты? Запишите, что вы делали и где. У меня всегда есть ручка и бумага, лежащая рядом со мной, чтобы записывать вещи, когда я пишу код.
  • Закладки . У меня есть 10 пронумерованных закладок, которые я могу установить.
  • Stacktrace . Вы можете легко просмотреть всю иерархию кода, который вы прошли. Мой редактор также позволяет мне копировать трассировку стека и сохранять ее. В следующий раз, когда я открою свой редактор, я могу загрузить трассировку стека для быстрой навигации.
  • Редактор навигации . Перейти к основному члену, перейти к наследнику, найти использования, перейти к ссылке, ...
Карра
источник
1

Я использую простое решение - никогда не закрывайте ничего, пока я не закончу с задачей. Это означает, что обычно в одном из примерно 50 открытых окон / вкладок есть что-то, что напомнит мне, о чем я думал, когда вернусь к этому.

Том Кларксон
источник
Проблема с этим подходом состоит в том, как вы отслеживаете несколько параллельных ветвей мысли / исследования?
Джесс Телфорд
1
Я не считаю, что это проблема - они все открыты во многом одинаково, и не имеет значения, к какой ветви я вернусь. Это работает лучше для веб-браузера, чем для IDE, но это может быть только потому, что моя текущая кодовая база на самом деле не организована концептуально.
Том Кларксон
1

Получить реальный инструмент для разработчиков / IDE, что вам когда-либо нравится. Vi, Emacs, Eclipse или что-то еще (выбор такой же большой, как и споры о том, что лучше, но это еще одна проблема), и научитесь правильно его использовать . Не используйте его, как многие, как Блокнот с подсветкой синтаксиса. Научитесь пользоваться горячими клавишами и не полагайтесь на мышь для обычных действий (это слишком медленно). Большой экран (минимум 1920x1200) является благотворным.

Мой инструмент разработчика назвал (медленные, но полезные имена делают их постоянными) и неназванные (быстрое вставка и удаление) закладки, прямой и обратный просмотр и просмотр справок - все в одном, заметки todo и разработчика (личные и групповые), прикрепленные к конкретная строка исходного кода. Это делает каждый язык под солнцем, без необходимости устанавливать еще один плагин.

Я работаю над кодовой базой, состоящей из дюжины или более модулей на 1 миллион плюс SLOC, используя полдюжины языков. Очевидно, что я не работаю над всеми из них одновременно, а сосредотачиваюсь на маленьких частях одного или двух, но я могу с помощью нескольких действий перейти к любой точке кода, которая связана с тем, что я делаю.

mattnz
источник
Я согласен, что правильная среда лучше. Я использую отличные оценки и метки прыжков Vim. Однако у них обоих есть ограничения: метки являются локальными по отношению к буферу, а истории меток являются линейными. Для сложных ситуаций этого по-прежнему недостаточно (поэтому задаем этот вопрос).
Джесс Телфорд
1
Я восхищаюсь Vi, но я видел, что можно сделать с его помощью в руках опытного пользователя, который готов написать несколько коротких сценариев, потратить некоторое время на то, чтобы научиться по-настоящему использовать VIM, или перейти на инструмент, который имеет функции настройки в способ, который работает для вас, и потратил время на изучение этого. Это моя точка зрения. Изучите свои инструменты. Хороший торговец не винит своих инструментов, ни один не делает хорошего программиста.
Mattnz
Согласовано. Я продвинутый новичок с vim (могу использовать, не думая большую часть времени, но едва поцарапал поверхность), поэтому я уверен, что есть вещи, которые я не знаю. Тем не менее, я не представляю, что можно сделать что-либо, например , ответ psr в vi (m) (по крайней мере, не из моего исследования).
Джесс Телфорд
@Jess: отметки не обязательно являются локальным буфером. Метки с заглавными буквами являются глобальными.
Дэйв Кирби
@DaveKirby Awesome - я люблю узнавать что-то новое о vim: D
Джесс Телфорд
1

В Visual Studio в сеансе отладки вы можете использовать окно 'Call Stack' (вы можете включить его Debug / Windows / Call Stackили с помощью ярлыка Ctrl+Alt+c) для отслеживания потока кода.

Джим Г.
источник
1
Как и в большинстве отладчиков. Вопрос скорее в том, когда вы вручную просматриваете ваш код, включая исследования за пределами вашей кодовой базы.
Джесс Телфорд
1

Я удивлен, что никто не упомянул множество инструментов, которые могут создавать графики графа вызовов. Я нашел, что doxygen - большая помощь. Вам даже не нужно использовать doxygen в своей программе, вы можете просто пометить функции, которые вы хотите отслеживать.

Чарльз Э. Грант
источник
0

Я использую режим org для emacs, который является инструментом для наложения контуров. С его помощью я могу написать схему, которая имитирует стек вызовов кода и включает прямые ссылки на сам исходный код (через org-store-link). Вы можете включить пояснительный текст, ссылки на веб-страницы и т. Д. (Например, когда вы ищете в Google магические числа)

Это не идеально. Например, структура структуры не имеет никакого представления о возврате на уровень, поэтому сложно отследить путь выполнения, в отличие от просто стека. Но это следующая лучшая вещь для диаграмм на бумаге, которую я нашел.

Майк Б
источник