waqur: (Default)
[personal profile] waqur
Microsoft добавляет новую фичу в свой отладчик в составе Visual Studio. (Чтобы я не рассказывал долго, в чём суть, смотрите видео по ссылке):

http://blogs.msdn.com/b/kaelr/archive/2011/05/21/introducing-debugger-canvas.aspx

Не знаю у кого как, а у меня процесс отладки обычно выглядит так:
1) программа говорит "мяу"
2) я делаю отладочную сборку
3) проверяю, что программа по-прежнему говорит "мяу"
4) запускаю MSVS, открываю exe-шник как проект, выставляю опции break-on-any-exception
5) запускаю прогу под отладчиком, программа говорит "мяу"
6) изучаю стек (такой списочек функций внизу справа), кликаю по функциям и смотрю исходники на предмет ошибок + состояние локальных переменных простым hover'ом по тексту

Всё это перечислено, собственно, к тому, что на практике отладка идёт снизу вверх по стеку. А не сверху вниз, как на том видео. И если в новом интерфейсе отладчика вывалить весь стек потока аж до первого стекового кадра в ntdll.dll, то экран просто превратится в мусорку.

Так отлаживать программы, как показано на том видео — сверху вниз по стеку — можно только в 11-м классе средней школы. Ну, максимум, ещё лабораторки по программированию в институте на первом-втором курсе.

Кроме этого, не всякая функция влезет в тот квадратик в 1/20 площади экрана, что ей выделяет отладчик. Функции в "полный рост" экрана, с некоторыми отдельными строками, продолжающимися до правого края — вполне нормальная практика, а вот больше — это уже перебор.

Так для кого всё это? Для программистов, которые не представляют себе, что такое стек и стековый кадр функции (контекст)? Для тех, кто не понимает, как могут одновременно существовать две копии одной локальной переменной с разными значениями, в разных стековых кадрах? Это что-ли целевая аудитория MS Visual Studio следующей версии?


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

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

(Если нет) При отладке рекурсивных и перекрёстно-рекурсивных функций выходит, что я ставлю точку останова "в одном месте", а срабатывает она совершенно в другом. Very confusing.

Date: 2011-08-29 01:47 pm (UTC)
From: [identity profile] cd-riper.livejournal.com
бывает, конечно, когда достаточно изучения call stack, а бывает, когда нужно и пошагать какое-то время, чтобы понять что происходит

March 2024

S M T W T F S
     12
3456789
10111213141516
17181920212223
24252627282930
31      

На этой странице

Автор стиля

Развернуть

No cut tags
Page generated 2026-03-01 11:21 pm
Powered by Dreamwidth Studios