Как избежать переменных только для отладчика?

StackOverflow https://stackoverflow.com/questions/1760838

  •  21-09-2019
  •  | 
  •  

Вопрос

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

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

return GetFoo();

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

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

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top