Как избежать отладочных переменных? - PullRequest
2 голосов
/ 19 ноября 2009

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

Например, этот код не позволяет вам навести значение GetFoo ():

return GetFoo();

Но этот код делает:

var foo = GetFoo();
return foo; // your hover-foo is great

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

Как бы вы написали код для лучшего компромисса между простотой и простотой использования отладчика?

Ответы [ 5 ]

2 голосов
/ 19 ноября 2009

Я не знаю о других отладчиках, но встроенный отладчик Visual Studio сообщит, что было возвращено функцией в окне «Autos»; после того, как вы перейдете к оператору return, возвращаемое значение будет отображаться как «[имя функции] возвращено» со значением любого возвращенного значения.

GDB также поддерживает те же функции; команда "finish" выполняет оставшуюся часть текущей функции и печатает возвращаемое значение.

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

Что касается более общей "проблемы" "переменных только для отладчика", они действительно только для отладчика? Я склонен думать, что использование именованных временных переменных также может значительно улучшить читабельность кода.

1 голос
/ 19 ноября 2009

Я бы пропустил назначение , пока оно не понадобится . Если вам никогда не понадобится этот фрагмент кода, желая взглянуть на эту переменную, вы не загромождаете свой код без необходимости. Когда вы столкнетесь с необходимостью, вставьте ее (это должен быть тривиальный рефакторинг Extract Variable ). И когда вы закончите с этим отладочным сеансом, избавьтесь от него ( Inline Variable ). Если вы обнаружите, что отлаживаете так много - и так много в этот конкретный момент - что устали от рефакторинга взад-вперед, подумайте о том, как избежать необходимости; может быть, помогут еще юнит-тесты.

1 голос
/ 19 ноября 2009

Я бы сказал, что об этом не стоит беспокоиться. Учитывая, что в типичном случае нет накладных расходов времени выполнения, сходите с ума. Я думаю, что разбиение сложных операторов на несколько простых операторов обычно повышает удобочитаемость.

1 голос
/ 19 ноября 2009

Еще одна причина, по которой вам не нужны промежуточные переменные в отладчике Visual Studio, заключается в том, что вы можете оценить функцию в окне Watch и в Immediate. Для окна просмотра просто выделите оператор, который вы хотите оценить, и перетащите его в окно.

1 голос
/ 19 ноября 2009

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

Этот навык очень полезен, если вам когда-нибудь понадобится отладить оптимизированный исполняемый файл. Оптимизатор может генерировать код, который значительно отличается от того, как вы его написали, так что символическая отладка не помогает.

...