Archive

Posts Tagged ‘Отладка’

Inception.

April 7th, 2011 14 comments

Сижу я сегодня на работе, никого не трогаю, отладчиком отладчик отлаживаю. А что, отладчик – тоже человек программа. Тем более что немногим ранее я его немножко совсем поломал, пытаясь добавить поддержку некоей конфигурации, которая текущей реинкарнацией отладчика не поддерживается. Ну вот, запускаю я его примерно вот таким образом:

windbg.exe kd.exe -k com:port=com1,baud=115200

…и замечаю, что что-то не так. А именно – опять сломался наш корпоративный прокси. А я как раз хотел посмотреть в… ну скажем MSDN. Попробовал и так и сяк. Не работает, вылетает по таймауту. Ну хорошо, но тут начитают происходить еще более мистические вещи. Outlook вдруг перестает реагировать мышь и клавиатуру; IE вообще не запускается – процесс стартует, но окно не показывается. Несколько подозрительно для проблем с прокси.

Read more…

NDIS, !ndiskd и DML.

February 6th, 2011 11 comments

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

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

Read more…

Отладка NMAKE скриптов.

October 30th, 2010 1 comment

Раз уж я заговорил про BUILD и NMAKE, то вот несколько простых (и, в общем-то, очевидных) способов отладки NMAKE скриптов.

  1. Директива препроцессора !ERROR очень полезна, когда нужно выяснить доходит ли управление до интересующей нас линии скрипта. Директива выводит указанный текст в сообщении об ошибке (U1050) и останавливает NMAKE.
  2. !MESSAGE пригодится для дампа макросов в лог. Например:
    !MESSAGE BUILD_PASS = $(BUILD_PASS)

    Выведет в лог номер прохода (PASS0, PASS1 или PASS2), в случае, если NMAKE, был запущен через BUILD в билд-окружении WDK.

  3. NMAKE умеет вызывать внешние команды на этапе препроцессора. Этим можно воспользоваться, чтобы, например, посмотреть параметры командной строки, которые BUILD передает в NMAKE (и массу других вещей, само собой). Достаточно добавить в SOURCES:
    !if [cmd /c pause]
    !endif

    Дойдя до той строки, NMAKE будет ждать ввода пользователя, позволяя тем самым внимательно посмотреть на то, что происходит в данный момент:

    NMAKE остановлен в момент разбора SOURCES.

    NMAKE остановлен в момент разбора SOURCES.

Как запустить «посторонний» бинарник под отладчиком в Visual Studio?

September 14th, 2010 7 comments

Visual Studio предлагает два основных отладочных сценария:

  • Собрать проект и запустить результат под отладчиком.
  • Присоединиться к уже запущеному процессу.

Третьей опции, – запустить произвольный бинарник под отладчиком, явно не предлагается, что вызывает смятение и смуту в рядах программистов, не нюхавших WinDbg. Вот один из способов как этого можно добиться.

  1. Создаем новый проект. Тип проекта выбираем “Makefile project”.
  2. В качестве команды сборки, очистки и пересборки проекта указываем “echo.”. Можно с точкой; можно вывести какой-нибудь текст.
  3. В качестве результата сборки указываем интересующий нас бинарник.
  4. Жмем на Finish.

Теперь можно смело жать F5. Visual Studio «соберет» проект и запустит нужный бинарник под отладчиком.

Про OutputDebugString.

July 14th, 2010 7 comments

Тут интересная дискуссия про “неработающую” OutputDebugString завязялась в комментариях, если кто пропустил. Читать вот примерно отсюда: http://blog.not-a-kernel-guy.com/2010/07/11/854#comment-15681.

Пошли мы как-то с коллегой на охоту…

July 11th, 2010 41 comments

Давно я про отладку не писал. Так вот пошли мы как-то с коллегой на Багов охотится. Вышли мы на двух таких матерых, опытных Багов. Их и помотали они нас…

Read more…

Символы для release сборки.

January 5th, 2010 Comments off

В очередной раз столкнулся с мифом, что, мол, release сборку невозможно отлаживать, так как символов нет. Значит так! Американцы на Луне были! Тьфу ты. В смысле, символы в release сборке включать: а) можно, б) нужно и в) полезно. Генерация отладочной информации не влияет на оптимизацию кода. Хотите, проверьте сами – сравните ассемблерные листинги с генерацией символов и без. Более того, случаи, когда это не так, однозначно трактуются как ошибки, которые можно смело отправлять в Microsoft. Мне, кстати, и самому было бы интересно посмотреть на тест-кейс воспроизводящий подобную ошибку.