Как отлаживают графику Windows в Microsoft

    Я в MS уже больше двух лет, и все равно в отладчике провожу большую часть полезного времени (больше только в Outlook).
    Раньше я делал Windows Imaging Component, новую библиотеку для работы с изображениями, а теперь DXGI — инфраструктуру hardware acceleration. Первое целиком в user mode, второе и в kernel, и в user, но общий экспириенс дебага в общем-то тот же.


    Кто бы не нашел баг и где бы не свалилось — всегда пришлют remote, то есть удаленную отладку. Причем почти всегда — сразу, без напоминаний. После репорта о краше сразу законнектиться и посмотреть — самое естественное действие.
    Стоят symbols servers, чтобы для main builds вынимать символы. Из source control взять нужные версии сорсов по номеру билда.
    Если ты несколько дней не реагировал и машина простаивала в краше — тогда full memory dump.

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

    Remote, разумеется, для джедайских дебаггеров. Forget visual studio. Дебаггеров в Виндовс (во всяком случае, в unmanaged-части) два — cdb и windbg, один другого кошернее.

    cdb — чисто консольный дебаггер. g, bp, чтения регистров, дампы памяти и стека, номер линии и название сорс-файла как средство просмотра сорcов.
    windbg — поверх этого умеет немного из привычного простым смертным. Показывает код, показывает в нем брекпойнты красным, есть даже окна watch и call stack. Watch работает отвратно, апдейтиццо по настроению, сложные выражения не понимает и так далее. Почему так? Потому что не нужно это все настоящим джедаям. Самая ценная часть windbg — все равно консоль, вся круть там.

    И при этом они очень мощные. Ставят все возможные брекпойнты — на загрузку dll, на загрузку драйвера, на доступ в куда угодно. Залезут в DLL unload, могут зарелоадить символы, покажут версию exe и прочее. Чтобы узнать все фичи, думаю, надо несколько лет плотных занятий. А, да, еще забавное занятие — коллективная отладка, когда в одной дебаг-консоли законнекчено несколько человек.

    Люди умеют отлаживаться на _очень_ низком уровне, начинают смотреть на асм-код и голый стек-трейс не моргнув глазом. У моего бывшего лида всегда с собой волшебная бумажка, на которой нарисовано где и как при вызове функции складываются на стек ip и esp, что идет в ebp, куда кладутся локальные переменные. Магический ортефакт, +2 к debugging skills. И это нужно было не раз и не два. Раньше я бы просто послал нафиг, послал дебаг-билд и сказал делать репро с ним, или на неделю бы засел в корпение с изменением кода, тысячью printf и миллионом перезапусков, а тут оказывается такое умеют отлаживать без.

    Чтобы проиллюстрировать — расскажу любимую историю.
    Упало далеко и в релизном билде Висты, дали remote, хочется посмотреть переменные функции в середине стека. До this дебаггер размотать не может. Понятно почему — this был в ecx, потому что call внутренний, его пушнули на стек при вызове следующей функции, он где-то в середине стек-фрейма и дебаггер его найти никак не может.
    Лид запускает любимый cdb, достает артефактную бумажко, начинает смотреть на дамп стека. Указателей рядом много разных, просто так не смотрится. Говорит — придется серьезней, будем смотреть на асм-код в месте вызова, посмотрим как он пушнул this на стек. Надо распечатать дизасм функции.
    Набирает консольную команду, которая распечатывает код с lines tags по имени функции. Оно распечатывает только почему-то только половину, видимо ограничение по количеству вывода. Мучается с параметрами, не помогает.
    Раздраженно говорит «Forget these fancy new commands, lets do it old-fashioned way». Берет адрес кода этой функции, смотрит какая идет в сорс-файле следующей, берет ее адрес, дампит голый дизасм между ними. Находит в нем пуши и нужный call, хэппи-энд.

    То есть, команда которая автоматически по имени функции дизасм ее с линиями — это новомодная непривычная херовина, то ли дело дамп между двумя адресами.
    Что же тогда такое VS debugger?

    И пока — я не видел в Виндовс багов, какие beyond debugging. Бывает, что сидишь несколько дней, бывает что нужна помощь мужиков из другой команды, бывает, что баг баунсится много раз (или коллективно отлаживается), но тем не менее, если оно регулярно падает (даже не обязательно постоянный репро) — найдеццо.

    Short recap:


    1) Уметь делать отовсюду и всегда remote debug. Иметь базу символов на все билды.
    2) Не бояться низкого уровня.
    3) Инвестировать в этот энвайронмент.

    И вот по этим всем поводам — когда дома в Винде что-то падает или тормозит, начинают приходить крамольные мысли законнектиццо к символам.
    И отладить.
    Поделиться публикацией

    Похожие публикации

    Комментарии 134

      +59
      прошу прощения за некоторый оффтоп, но понял где то процентов 50, и то интуитивно (ибо на таком уровне не работаю)
      Напомнило монолог из south park про марклар моего марклара.
      Хотя в общем то история одного джедая :)
        +42
        просто мс тестят новый генератор текста =)
      • НЛО прилетело и опубликовало эту надпись здесь
          +55
          Есть, условно, причины маркетинговые и технические. За маркетинговые (отсутствие которых отрицать нельзя) я не готов говорить, я слишком далеко от них далеко.
          Но есть и технические, основная из которых — новая Driver Model (WDDM).
          Переносить новую driver model на XP не представляется возможным — слишком много изменений в ядре OS, переносить все фичи DX10 на старую driver model невозможно (виртуализация и шедулинг, к примеру, принципиально не заживет).
          Возможен компромисс — переносить только хардверные фичи DX10 на старую driver model, это прилично работы для нас и очень много работы для производителей железа — писать поддержку новых фич для новой и старой driver model, и поведение API будет разным на разных OS.
          Но это все равно не полное решение проблемы и очень тяжелое и для MS, и для производителей железа.
          • НЛО прилетело и опубликовало эту надпись здесь
              +5
              Слышал, что в новом wine будет поддержка dx10. Так что у вас есть шанс ;)
              0
              А Windows Driver Foundation это обвязка над любой WDM (новой или старой) или это и есть новая Driver Model которую нужно использовать начиная с висты?
                +2
                Ммм, я никогда не слышал термина «Windows Driver Foundation».

                Есть XDDM (XP Driver Display Model), это то, как писались графические драйверы на XP и раньше.
                Есть WDDM (Windows Driver Display Model), новая модель драйвера в Висте. Они независимы, драйвер может быть написали либо под XDDM, либо под WDDM.

                Виста поддерживает и то, и другое. Чтобы использовать новую графическую инсфраструктуру ядра и поддерживать новые для Висты API (DX9Ex и D3D10), драйвер должен быть WDDM.

                Надеюсь, я ответил на вопрос.
                  0
                  ну вот даже книжка такая есть от Microsoft Press: www.amazon.com/Developing-Drivers-Windows-Foundation-Developer/dp/0735623740/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1224954507&sr=8-1

                  Вкратце разработка драйвера становится похожей на разработку COM-сервера, поддерживающего определенные интерфейсы
                    +1
                    Интересно, никогда не сталкивался. Мне кажется, это потому что WDDM ортогонален этому добру, он именно для display drivers. Т. е. реализация минипорта скажем у графики своя, только зовем нужные коллбэки в IHV driver.
                    Я спрошу вокруг еще на всякий случай.
                0
                А вот эти все самопальные DirectX 10 for Windows XP что с технической точки зрения собой представляют, можете объяснить на пальцах? :-)
                  +3
                  Я не смотрел детально, но видимо своя реализация d3d10.dll и компании, которая пытается форвардить вызовы в OGL (а то и D3D9). Пока не случается использования новой инфрастуктуры — теоретически это можно заставить работать, ценой эффективности и эмуляции. Практически — не все производители видеоркарт выпустили для OGL экстеншены, соответствующие D3D10, и прочая, прочая.
                0
                Ладно десятый DirectX, с ним понятно. Работы по переносу драйверов ещё и в XP огромные, а тут нужно ещё Vist'у рекламировать. Тем более в новой ОС появилась возможность сделать API над всеми новыми Direct'ами — DXGI, что помоему очень хорошо. Так как все общие функции вынесены в него: SwapChain (наконец-то они быстро работают!), управление Gamm'ой, Surface'ы (их можно шарить между девайсами! ура!). ))

                Только жаль что Microsoft все таки с такими профессионалами отладки пропускает серьезные баги в своих SP'ах. Вон в 1-ом SP для Vist'ы(как в 32 битной, так и в 64-ой) намертво отвалились Multihead D3D9 устройства, в Reset() все падает где-то в d3d9.dll. Главное и неотправишь баг никуда, на форуме XNA меня успешно проигнорировали (может конечно виной мой английский ))).
                  +1
                  Интересно. А у тебя есть репро на 10 строчек? Пришли пожалуйста в приват.
                  0
                  Ладно десятый DirectX, с ним понятно. Работы по переносу драйверов ещё и в XP огромные, а тут нужно ещё Vist'у рекламировать. Тем более в новой ОС появилась возможность сделать API над всеми новыми Direct'ами — DXGI, что помоему очень хорошо. Так как все общие функции вынесены в него: SwapChain (наконец-то они быстро работают!), управление Gamm'ой, Surface'ы (их можно шарить между девайсами! ура!). ))

                  Только жаль что Microsoft все таки с такими профессионалами отладки пропускает серьезные баги в своих SP'ах. Вон в 1-ом SP для Vist'ы(как в 32 битной, так и в 64-ой) намертво отвалились Multihead D3D9 устройства, в Reset() все падает где-то в d3d9.dll. Главное и неотправишь баг никуда, на форуме XNA меня успешно проигнорировали (может конечно виной мой английский ))).
                  +2
                  Долго вспоминал, где я это видел, и только по нику афтора всплыло слово «gamedeff»
                  • НЛО прилетело и опубликовало эту надпись здесь
                      0
                      В ЖЖ саймон еще пишет
                    • НЛО прилетело и опубликовало эту надпись здесь
                        +7
                        Ну, дело, разумеется, уже не столько в том, что написано на бумажке, а в силе артефакта как такового.
                        +14
                        Отличная статья, спасибо! Очень мало таких «инсайдерских»статей на Хабре.
                        Первые плоды инвайтов на Хабре. Я рад.
                          +5
                          Присоединяюсь. Было очень интересно почитать, хоть я и не понял половину :)
                          +1
                          а я вот большинства не понял… обилие рабочих терминов, которые мне в принципе не знакомы, но все это всеравно очень интересно
                            +2
                            Боюсь, они скорее специальные, чем рабочие. Я их специально и не стараюсь переводить, они и привычней звучат по-английски, и хорошо акцентируют, где повествование, а где специальный термин. Они все гуглятся и я могу любой из них пояснить, если интересно.
                            +38
                            Ваш стиль изложения напоминает протокол UDP: не особо тратясь на всякие приветствия и введения, сразу бросаете в читателя шмат raw data.

                            Мне это нравится :)
                              +1
                              I'm loving it! ^_^
                              +3
                              В принципе хорошая статья, язык правда хоть и русский, но изложение английское :)
                                +4
                                Я бы сказал, изложение джедайское:)
                                  +3
                                  Все наоборот — язык в основном английский, изложение чисто русское.
                                  Мне понравилось и я даже с ужасом понял что я все понял :)
                                    +1
                                    Изложение в стиле дзен с wasm.ru ))
                                      0
                                      да-да, я прочел пару первых предложений, выругался на перевод, полез вниз искать ссылку на оригинал )
                                      +5
                                      т. е., после того, как я, матерясь, нажимаю на кнопку «Отправить сообщение об ошибке в Microsoft», это сообщение приходит к вам?
                                        +3
                                        а вы думали это простая заглушка? )) примерно на один такой баг репорт из трех мне сразу же предлагается скачать заплатку.
                                          0
                                          нет
                                        +3
                                        Если это упало в моем компоненте, и таких набралось довольно много (типа там, мильен), то да, я буду этот дамп посмотреть.
                                          0
                                          мм, интересно, то есть на 1-10 сообщений реакции не будет ни у кого никакой?
                                            +2
                                            Скорее всего да, пока не кончились те, которых десятки тысяч и миллионы. Они совсеееем не кончились.
                                              0
                                              В принципе этого и следовало ожидать, ведь скорее всего это неполадки с чем то не msовским. Спасибо)
                                            0
                                            Блин! А я только на проксе открыл узлы для того, что бы юзеры могли дампы сливать. У меня нету мильона машин…
                                              +3
                                              Не-не, возможно именно твой дамп станет миллионным!
                                                0
                                                А кто диспетчер печати пишет под висту, не сосед по кабинету? Падает зараза постоянно…
                                                  0
                                                  Я подозреваю, там на стеке уже много всего, Shell, Printing, Driver, еще поди Network… (они в любом случае далеко от меня сидят :)
                                                  Познавательно может быть посмотреть в каком-нибудь Process Explorer call stack падения, а то и тупо отладчиком к explorer.exe подцепиться с самого начала. Может выясниться, что вообще чья-то левая dll виновата.
                                                    0
                                                    Все оказалось гораздо проще — в Vista очень много чего пишется в логи… тьфу в журналы. Так вот посмотрев их внимательно стало ясно что виновата вовсе не она, а… драйвер HP 1010, ведь говорил давно уже что пора выкунить этот ретро-принтер.
                                            –20
                                            Интересно, сколько еще существует энтузиастов пишущих свой движок?

                                            :) :)

                                            Эта тема была очень популярна лет 5 — 7 назад. С тех пор, я так понимаю, движкоделов и рендероделов которые заинтересованы в PC платформе значительно поубавилось.
                                              +2
                                              «Чукча не читатель, чукча — писатель.»
                                              Это я о вас.
                                                –9
                                                Это же вполне относится и к вам.
                                                  +2
                                                  Во первых совершенно непонятно с чего вы взяли, что автор расказывает о том, как он пишет свой движек. Статья о другом.
                                                  Во вторых писали и будут писать. Невозможно на движке Q3 9-и летней давности написать приличную игру сейчас, как бы он не был хорош в свое время.
                                                    –3
                                                    сейчас есть приличные вполне, коммерчески доступные движки. тот же фаркраевский, или красисовский. им не девять лет.
                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                +9
                                                да, Microsoft еще те энтузиасты :)
                                                0
                                                Прекрасно, прекрасно, спасибо за статью :)
                                                  +2
                                                  А чем обусловлен такой набор отладчиков? Если можно, поподробнее.
                                                    +4
                                                    Отсутствием альтернатив и исторической необходимостью, по большому счету.
                                                    — Когда Windows начинали писать, никакой Visual Studio не было, в ходу были именно такие отладчики.
                                                    — Очень часто надо отлаживать kernel, никаких средств кроме kd в MS для этого нету.
                                                    — Это очень мощные дебаггеры, очень. Начиная от скриптов и богатых команд, до огромного количества написанных экстеншенов для специальных случаев (которые выводят статус отдельных подсистем, ищут дедлоки, находят нужные модули на стеке, очень много всякого). То есть, это действительно самый мощный тул отладки, какой есть в MS.
                                                    — Так как таким образом отлаживают уже десятилетиями, с этими дебаггерами уже связана большая инфраструктура. Можно очень просто и прозрачно отправить remote, они не требуют установки, их легко конфигурировать для автоматизации, все новые тулы типа AppVerifier заточены на работу с ними.

                                                    Чисто user mode еще можно пытаться отлаживать в студии, я первые месяцы так делал. Через год мне на примерах объяснили, что нужно bite the bullet и изучать джедайские тулы.
                                                      +1
                                                      Спасибо за развернутый ответ. Очень познавательно.
                                                        0
                                                        а SoftIce совсем не Ice?
                                                        когда ещё не было интернета (в моей деревне) и кейгенов достать было не всегда возможно, софтайсом мы взламывали защиту программ, обычно это был серийник. помню, что не осилили только WinRAR

                                                        конечно, ни о каком kernel mode речи не шло
                                                          +1
                                                          Ну я не вижу приемуществ, честно. Основное, какое было у SoftIce, как я понимаю, возможность делать kernel debug на той же машине (в kd нужно коннектиться с другой через COM-port или FireWire). Но в MS уже как-то давно сложилась культура разработки, в которой тебе и так нужна тест-машина (накатывать свежие билды OS) и дев-машина (на которой ты собственно живешь и код пишешь), так что на одной отлаживаться не надо.
                                                          И я подозреваю по мощности инструментов отладки kd куда мощнее. Там вселенная внутре, натурально.
                                                      +10
                                                      великолепная статья!
                                                      только не понял про что именно :)

                                                      «я работаю в майкрософт» — этого тега не хватает
                                                        +5
                                                        Отличная идея, спасибо!
                                                        –31
                                                        «отлаживают»? Наверное, все таки, «откладывают», как курица яйца.

                                                        «Отладка графики Виндоус в Майкрософт».

                                                        Этот хаос слов кто то смог осознать хотя бы раза с третьего?
                                                          +4
                                                          т. к. минус не могу поставить, выражу его просто словами: не надо всем показывать вашу необразованность и невоспитанность.
                                                            –13
                                                            мою? очень интересно
                                                              –13
                                                              «Необразованность» это достаточно спорный пункт на который бы я, на вашем месте, не стал напирать. Невоспитанность — странно это слышать. Неужели говорить о том, что автор не может внятно выразить свои мысли, стали частью поведения попадающего под эти рамки? Заметьте, я ни сколько не пытаюсь унизить автора или заикнуться хотя бы словом о его профессионализме, я лишь говорю о том, что мне, человеку приземленному, было достаточно сложно читать этот текст. Учитывая то, что я обладаю неким опытом в АйТи среде, можно подумать, что не мне одному сложно читать материал поданный таким образом.

                                                              Не тактично с вашей стороны с вашей стороны бросаться такими словами, Доброзёл.
                                                                +2
                                                                Эта статья ориентированна на то, что человек имеет опыт работы программирования низкого уровня. То есть, чтобы понять эту статью, нужно иметь представление об отладке и ассемблере.
                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                                +4
                                                                Ммм, то есть он ориентирован на анализ асма, когда нет исходного кода и символов?
                                                                Я в такие игры сразу не играю, у нас, слава богу, есть и то, и другое.
                                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                                  +1
                                                                  I'm a little, little code in a big, big world… Hello, world!
                                                                  +1
                                                                  Если он не поддерживает kernel debug и remote, то вобщем-то и разговаривать не о чем.
                                                                  К тому же, обычно интересное начинается в момент, когда дебаггер перестает видеть переменные, и там визуальное представление кода уже не поможет…

                                                                  Я попробую локально ради интереса, впрочем.
                                                                    0
                                                                    насколько я помню remote он не поддерживает.
                                                                    хотя могу ошибаться. давно это было
                                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                                        +2
                                                                        жаль что Numega крест на SoftIce поставила
                                                                          0
                                                                          Согласен, жаль. У меня за последние, наверное, 10 попыток его поставить на виртуалках все были безуспешны, увы :-( Думаю, поддерживали бы они его — все было бы не так печально.
                                                                        0
                                                                        Поможет визуальное представление кода.
                                                                        Гораздо лучше видеть, что в EAX — удвоенный результат вызова функции strlen, который затем сравнивают с нулем, чем видеть одинокое JE 0x401345 :-)
                                                                          +2
                                                                          Это все может иметь смысл, когда нет сорсов и символов к ним, и ты смотришь на голый асм-код.
                                                                          У нас, повторюсь, слава богу не так. Ты и так видишь в коде, к чему присваивается результат strlen.
                                                                          Т. е. если дебаггер в состоянии увидеть, в каком регистре какая переменная — то проще смотреть на переменные, а если не в состоянии — то уж придется самому.
                                                                      +2
                                                                      ого!
                                                                      одна из лучших статей, что я читал на Хабре за последние пару месяцев.
                                                                      Чертовски увлекательная у вас работа… этакий IT-detective

                                                                      пишите побольше, инсайдеровские статьи это всегда интересно.
                                                                        +2
                                                                        Слава господу, я не только отладкой занимаюсь, нужно и фичи писать, и над дизайном хоть немного думать. То есть, я в общем-то обычный девелопер, нисколько не ориентированный на отладку.
                                                                        При всем при этом, все равно основное время сидишь в дебаггере, когда не в раздумьях. На концентрированную отладку сразу закладывается больше половины времени разработки, народ понимает, что он пишет.
                                                                        +10
                                                                        автор-жосткий технарь=)
                                                                          +3
                                                                          хммм, ничего не понял но мне это нравится!
                                                                            0
                                                                            ничего не понял, но было круто!
                                                                              +1
                                                                              вы не просто джедай, вы — ниндзя!
                                                                                0
                                                                                Пользуясь случаем можно поинтересуюсь, как работает политика конфиденциальности в таких мегакорпорациях как Microsoft.
                                                                                Что мешает ее сотрудникам выложить анонимно кусок какого-то кода в сеть?
                                                                                Или там системники заклеены, или работаете через терминалы, или просто на совесть? :)

                                                                                P.S. Спасибо за статью.
                                                                                  +3
                                                                                  Ничего такого нет. Но если найдут — моментально уволят, будут очень стараться искать.
                                                                                  Народ больше боится не за код, а за совсем важную информацию — security issues, сроки выхода, новые фичи и т. д.
                                                                                  За такое уже и судиться будут.

                                                                                  +1
                                                                                  Люк, это ты? :)
                                                                                  Статья прям таки джедайская!
                                                                                    0
                                                                                    да, windbg прикольный, жалко только MS формат PDB не открыла, а CodeView он только частично понимает…
                                                                                      0
                                                                                      Там же целый SDK для работы с pdb есть?
                                                                                      Мне кажется, через него можно вытянуть всю информацию, какая в pdb есть.
                                                                                        +1
                                                                                        не, я хотел бы PDB писать, а не читать =)
                                                                                      +1
                                                                                      Статья на отлично! Всегда было интересно почитать статьи про «кухню» Microsoft ©.
                                                                                      Побольше бы статей про кодинг и дебаг в стенах вашей организации, как что происходит и какими тулзами пользуетесь.
                                                                                        +4
                                                                                        У лида шпаргалка с разблюдовкой стек-фрейма? Потрясающе… Подобное, еще 8 лет назад, рядовые программисты просто вынимали из подсознания. Равно как хексовую арифметику и старшинство байт в дампе.
                                                                                          0
                                                                                          да, тоже этот момент смутил. без этих знаний отладка кода с++/винапи может быть крайне сложной…

                                                                                          странно, в общем.
                                                                                            0
                                                                                            Да ну. Можно полагаться на дебаггер и debug build, я так жил 6 лет жизни в геймдеве. В debug build дебаггер справляется с раскруткой стек-фрейма практически всегда, потому что его смущают только оптимизации передачи параметров по регистрам, и можно про все это тупо не знать.
                                                                                            Все это начинает быть действительно необходимым, если нельзя себе позволить загрузить debug-версию и повторить баг.
                                                                                            0
                                                                                            да, тоже этот момент смутил. без этих знаний отладка кода с++/винапи может быть крайне сложной…

                                                                                            странно, в общем.
                                                                                              0
                                                                                              Соратники! Ведь, если вы знаете, что такое стек-фрейм, то вы однозначно они. Можно полагаться на что угодно. Даже на «житие святого Билла». Но про ESP-N супротив EBP+N, уважающий себя team-leader должен помнить даже в постели чужой жены без соответствующей шпаргалки.

                                                                                              Мне так казалось до сих пор, по крайней мере. Готов рассмотреть аргументированные поправки к устоявшемуся мировоззрению.
                                                                                                0
                                                                                                Ну, здесь нужно, не аргументы, здесь нужно статистику.
                                                                                                Я вот честно признаюсь, писал игрушки на C++ 5 лет не зная про детали ESP и EBP (впрочем, только из университета был).

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

                                                                                                У меня сдержанные сомнения, что все девелоперы на С, условно, с пятилетним опытом выберут последний пункт.
                                                                                                  0
                                                                                                  ESP+N и EBP-N =)
                                                                                                  0
                                                                                                  На PowerPC, скажем, ABI и формат стек фрейма гораздо более сложный.
                                                                                                  Тут шпаргалка и пригодилась бы.
                                                                                                  0
                                                                                                  Интересная статья. Первый раз читаю про Microsoft«изнутри»
                                                                                                    0
                                                                                                    Есть замечательный блог сходной тематики. Рекомендуется к прочтению =)
                                                                                                    blogs.msdn.com/oldnewthing/
                                                                                                    –1
                                                                                                    А теперь вопросы на несколько сотен долларов (которые с меня снял Майкрософт за Висту).

                                                                                                    1) Почему ж Виндовсы так херово работают-то и так глючат? Vista с SP1 — качество, как в бета-версии до сих пор.

                                                                                                    2) За каким х*** убрали поддержку в VPN MSCHAPv1, если тысячи контор имеют железо (тот же PIX), которое только с ним и работает. Например, в моей конторе Висту никто не покупает именно из-за этого. И таких много.
                                                                                                      +1
                                                                                                      Я ни разу не готов говорить за Висту вообще, ее разрабатывают две с чем-то тысячи человек.
                                                                                                      Могу разговаривать конкретно за графику, да и та куда сильно больше одного человека. В остальное ввязываться — упаси господь.

                                                                                                      Если рассуждать абстрактно — на примере графических драйверов можно сказать, что допиливать драйверы до серьезного уровня может занимать натурально годы. Спустя год мне Виста нравится куда больше, чем в момент релиза.

                                                                                                      Но, повторюсь, предметно за что-либо вне графики я не готов говорить.
                                                                                                      0
                                                                                                      Консоль в отладчиках, конечно, рулит… Но я уж лучше с обычными бряками без украшательств, но с возможностью видеть код и нормальной навигацией по нему, чем с кучей фич, но с необходимостью после каждого шага обновлять окно кода :-)
                                                                                                        0
                                                                                                        Основная фича Windbg (по сравнению с cdb) именно в этом — что он может в отдельном окошке показывать код, где в нем сейчас исполнение, где стоят брекпойнты и т. д., не теряя при этом консоль.
                                                                                                        Я еще не дошел до того, чтобы чисто консольным отладчиком пользоваться, дзена не хватает.

                                                                                                        Windbg, например, из забавного, умеет автоматически вынимать файл с кодом из source control по номеру билда, это очень круто. Подконнектился куда угодно, и тебе показывают ту версию файла, которая на той машине.
                                                                                                          0
                                                                                                          Это не фича, а MustHave :-D
                                                                                                          Консолька есть в Olly, правда, кроме как для хардварных/софтварных бряк я ее не использую :-) И так можно отлаживать.
                                                                                                        –7
                                                                                                        Простите, это был Microsoft language? Спасибо, что дали почувствовать себя полным дураком. К счастью, такое изложение не частый гость на Хабре.
                                                                                                          –5
                                                                                                          Кому пришло в голову выложить тут промт?
                                                                                                          И пока — я не видел в Виндовс багов, какие beyond debugging.
                                                                                                            0
                                                                                                            потрясано. ваш бы экспириенс да в бумажном виде в твёрдом переплёте.
                                                                                                              0
                                                                                                              Насколько я понимаю, прецедент есть — advancedwindowsdebugging.com/
                                                                                                              Мужик черти сколько концетрированно занимался отладкой Windows и написал об этом книжку.
                                                                                                                0
                                                                                                                отлично. отлично!
                                                                                                                было б ещё в достойном переводе.
                                                                                                              +1
                                                                                                              Прочитал с удовольствием. Статья очень даже познавательная. Однако технической информации маловато. Сам пишу системные программы и драйвера под Windows, однако опыт у меня не большой. Предложение к автору, может как-нибудь напишешь небольшую (а лучше большую) серию статей на темы:
                                                                                                              1. Организация работы программистов в Microsoft. Особенности, отличия…
                                                                                                              2. Отладка с использованием windbg, cdb, kd.
                                                                                                              С удовольствием прочитал бы.
                                                                                                                0
                                                                                                                А я всё еще пишу тетрис…
                                                                                                                  +2
                                                                                                                  А я вполне бы мог все еще писать Дальнобойщиков…
                                                                                                                  Как жизнь разбросала-то, а, Жорик?
                                                                                                                    0
                                                                                                                    А Вы не подскажете, Дальнобойщики 3 умерли или все-таки еще можно ждать релиза? :)
                                                                                                                    За статью отдельное спасибо, хоть я и веб-девелопер, но было очень интересно почитать!
                                                                                                                      0
                                                                                                                      Не умерли. Разработка идет, следите за новостями на www.rignroll.ru.
                                                                                                                        0
                                                                                                                        Это радует. Уж больно долго длится разработка, сил уже нет ждать. :)
                                                                                                                  0
                                                                                                                  Здорово, вспомнил как сам не так давно дебагал модуль один в нашем проекте. Мы часто наращивали функционал и тестеры пропускали некоторые баги, ну понятное дело, человеческий фактор, нехватка времени и тп. Тогда мы сделали запуск этой софтины из-под cdb и оно нам посмертную корку кидало куда надо со всеми регистрами и списком процессов и пр.
                                                                                                                  Потом по стеку вычисляли примерно ответственного за каждый конкретный крэш и он брал в руки windbg и грузил кору для изучения проблемы. Был у нас один парень который очень глубоко в это уходил — дизассемблил даже какие-то системные вещи. Сервер символьной информации у нас тоже был…
                                                                                                                  Эх, вот романтика была!
                                                                                                                    +3
                                                                                                                    MS хорошо показывает, как такая романтика превращается в жесткий BDSM :)
                                                                                                                    +7
                                                                                                                    Побольше бы таких топиков и таких авторов — отношение к windows сильно сдвинулось бы в +.
                                                                                                                      0
                                                                                                                      Отличная статья! Приятно знать, что Истинные Джедаи встречаются не только в мире UNIX!
                                                                                                                        0
                                                                                                                        Да уж, это вам не print_r($_POST);…
                                                                                                                        автору респект!
                                                                                                                          0
                                                                                                                          :) Спасибо!

                                                                                                                          Для меня путеводителем в мир Windows была книга Марка Руссиновича и Дэвида Соломона «Внутренне устройство Microsfot Windows». А дорога, которой ведут авторы и был windbg (точнее — livekd). Это 900 страниц открытий, крышу сносящих. :)

                                                                                                                          Саймон, а можете рассказать про сам процесс тестирования? Как выполняется автоматическое тестирование? Как присылаются инвайты на ремоут дебаггинг :)? Как выбираются счастливые обладатели инвайтов? Вы, девелоперы, только код девелопите, или и тесты пописываете? Тестирование проходит на виртуальных машинах?
                                                                                                                            +4
                                                                                                                            Ох, это надо рассказывать много и долго. Поди придется еще один пост писать :)

                                                                                                                            Давай попробую вкратце совсем. Повторюсь, это про часть Windows где я. Hardware acceleration нельзя тестировать на виртуальных машинах, поэтому стоит лаб с сотней машин разных конфигураций.
                                                                                                                            Практически все тестирование — автоматическое, все тестеры пишут автоматические тесты и называются Software Engineer in Test. Требования при их наборе немногим уступают требованиям на девелоперов (некоторые патриоты теста считают, что и превосходят).
                                                                                                                            Когда пофиксал баг — даешь на тестирование тестеру из той области, он гоняет всяческие тесты, если падает — присылает тебе remote.
                                                                                                                            Есть наборы тестов, которые гоняются каждый день на билде, которые гоняются при интеграции изменений из другого бранча, есть полные наборы тестов, которые гоняются перед milestone. Есть люди, которые ими заведуют, если падает — присылают примерно команде. Если ошибутся, нестрашно — просто мэйл форвардится пока не найдется владелец проблемы.

                                                                                                                            Девелоперы пишут unit tests, которые сами гоняют перед чекином. Простенькие такие, по сравнению с монстрами, которых пишет тест.
                                                                                                                              0
                                                                                                                              Большое спасибо за пост. Пишите еще, пожалуйста!
                                                                                                                                –2
                                                                                                                                Макбук?
                                                                                                                                  0
                                                                                                                                  Статья интересная, спасибо. Правда, очень техническая. Теперь, для баланса бы, услышать художественное повествование о том, как вы попали в Microsoft (если это — не слишком личная история)… ;)
                                                                                                                                    0
                                                                                                                                    Я не думаю, что лично моя история сильно заинтересует хабратусовку :)
                                                                                                                                    Разве что как интервью проходило можно написать…
                                                                                                                                    Художественная часть очень короткая. Вот такая: sim0nsays.livejournal.com/12749.html
                                                                                                                                      0
                                                                                                                                      Первый коммент жжёт :)
                                                                                                                                    0
                                                                                                                                    Интересная статья, спасибо!

                                                                                                                                    Правда при прочтении почувствовал себя жутковато — и еще раз хочется поблагодарить судьбу за то, что перешел на Java :)
                                                                                                                                      0
                                                                                                                                      Было бы неплохо, чтобы 1 день в неделю каждый девелопер становился евангелистом и писал такие статьи :-)
                                                                                                                                        0
                                                                                                                                        Я нихрена не понял, но вы достучались до моего сердца!
                                                                                                                                          0
                                                                                                                                          Я все понял, но вы не достучались до моего сердца.
                                                                                                                                          Я думаю, что проще и лучше не создавать проблем, чем с честью, трудностями и героизмом их преодолевать.
                                                                                                                                            0
                                                                                                                                            В смысле, багов не делать? Или изменить С/C++, x86 и calling convention?
                                                                                                                                            0
                                                                                                                                            Вау, я захвачен вашими статьями, спасибо :) Идея пост-отладки засела мне в мозг, я хочу это делать :) Я вот только, не могу понять, с чего же начать. Может Вы дадите вектор движения.

                                                                                                                                            Поясню, сейчас я пишу на C++ из под NetBeans (ох, это ужасно, в плане дебага). Когда мне сообщают о какой-либо ошибке, я просто прикидываю где бы это могло быть, и расставляю брейкпоинты запускаю приложение из под IDE ну и так далее…

                                                                                                                                            Вот и вопрос созрел: что мне нужно сделать с моим приложением (т.е. как мне его модифицировать), что бы в случае если приложение у пользователя упало, то я бы мог восстановить у себя на компьютере как бы сессию дебага (не знаю как выразиться), т.е. мне нужно сделать полный дамп памяти, как то восстановить потом, либо что-то еще, где бы мудрости набраться?
                                                                                                                                              0
                                                                                                                                              www.codeproject.com/KB/debug/postmortemdebug_standalone1.aspx
                                                                                                                                              Выглядит неплохом руководством. Вкратце, надо добавить код, который по unhandled exception создает файл с минидампом. Этот дамп потом можно открыть на другой машине и посмотреть на состояние регистров и памяти в момент падения. В коде, который создает Minidump можно подкрутить опции, чтобы он делал полный дамп памяти процесса. Понятное дело, нужны символы того билда, в котором упало.

                                                                                                                                              В Advanced Windows Debugging (http://advancedwindowsdebugging.com/) есть целая глава про postmortem debugging, это довольно полное описание всех возможностей. Ее довольно тяжело читать, но оно того стоит.

                                                                                                                                              Спрашивай, если что.

                                                                                                                                              0
                                                                                                                                              Не понял про дебагеры, почему нельзя использовать Visual Studio Debugger? Разве он плохо подходит для remote debugging?

                                                                                                                                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                                                                                              Самое читаемое