This project is read-only.

KDLIBCPP

Начало работы

Шаг 1. Что нам нужно?
Для быстрого страта нам понадобятся следующие вещи:
  • svn клиент ( например, Tortoise SVN )
  • MS Visual Studio 2012
  • установленный плагин nuget для Visual Studio
Шаг 2. Забираем исходный код
выполняем в консоле следующую команду:
mkdir C:\MyProjects\kdlibcpp
svn checkout https://kdlibcpp.svn.codeplex.com/svn/branches/0.1 C:\MyProjects\kdlibcpp

Если вы используете TortoiseSVN, тоже самое можно сделать в "Проводнике"
Шаг 3. Собираем пример
Запускаем студию и загружаем проект kdlibcpp-2012.sln. Если вы все сделали правильно на предыдущих шагах, то в он должен находится в каталоге C:\MyProjects\kdlibcpp. Собираем и запускаем проект kdlibcpp. В благоприятном случае он начнет выполнять тесты. Если все зеленое - то могу вас поздравить, все работает.
Шаг 4. Тестируем сборку.
Чтобы окончательно убедится в этом, переходим в папку samples и собираем проект sklib. Получившуюся dll можно загрузить в windbg c помощью команды:
.load sklib.dll 
!sklib.help

Шаг 5. Что дальше?
Если вы дошли до этого шага и все у вас получилось, то мне остается вас только поздравить и пожелать дальнейших успехов. Для дальнейшего знакомства с kdlibcpp можно посоветовать следующие разделы:

Сборка и настройка

Необходимые компоненты

Использование NuGet

Разработка расширений для windbg

Разработка собственных отладочных приложений

kdlibcpp API

Инициализация

Перед использованим kdlibcpp необходим провести инициализацию с помощью вызова initialize. После окончания работы проводится деинциализация с помощью вызова функции uninitialize.

Многопоточная модель

При работе kdlibсpp в многопоточном приложении есть ряд ограничений. Все функции которые могут привести к изменению состояния отладчика ( старт и стоп процессов, возобновление исполнения процессов и.т.д ) должны происходить обязательно в том же потоке, где был произведен вызов initialize. Многократный вызов функции initialize или функций меняющих состояние отладчика в других потоках может привести к непредсказуемым последствиям: зависниям или авайриным завершениям программы.

Управление отладкой

Запуск и остановка процессов

Для этого предназначены следующие функции. Все они оперируют с идентификатором процесса типа PROCESS_DEBUG_ID. Обращаем ваше внимание: этот идентфикатор никак не связан с системным идентификатором процесса ( PID ) и имеет смысл только для kdlibcpp.

Анализ аварийных дампов.

Для анализа аварийных дампов предназначены следующие функции: Эти функции, также как и функции для работы с процессами, используют идентификатор типа PROCESS_DEBUG_ID для управления дампом. Открытый для анализа дамп с точки зрения kdlibcpp выглядит как процесс. Только для него по понятным причинам нельзя вызывать функции, изменяющие состояние отладчика ( вроде targetGo )

Отладка ядра

Для подключения отладчика к ядру Windows служит функция: Если нужно подключить отладчик к локальному ядру ОС, то сначала можно убедится в доступности этой операции:

Изменение статуса отладчика

Отладчик может находится в одном из следующих состояний:
Значение Описание
DebugStatusGo Все отлаживаемые процессы выполняются. Отладчик ожидает отладочных событий
DebugStatusBreak Все отлаживаеме процессы остановлены. Отладчик может получать информацию о них
DebugStatusNoDebuggee Отладчик не присоединен


Узнать текущий статус отладчика можно с помощью функции targetExecutionStatus.

Для измениения стутсв отладки служат функции:
  • targetGo - Возобновляет выполнение всех отлаживаемых процессов
  • targetStep - Выполняет пошаговую трассировку ( без захода во вложенные процедуры )
  • targetStepIn - Выполняет пошаговую трассировку ( с заходом во вложенные процедуры )
  • targetBreak - Останавливает выполнение всех отлаживаемых процессов

Получение отладочной информации

Исполняемые модули

Для работы с исполняемыми модулями служит класс Module и функция loadModule, позволяющая получить экземпляр класса Module по адресу или имени. Класс Module можно использовать для следующих задач:
  • Получение аттрибутов исполняемого модуля: адрес загрузки, имя, время создания и.т.д
  • Получатьинормацию об отладочных символах ( например, узнать имя процедуры знаяя ее адрес )
  • Получать информацию о типах ( при наличии отладочных символов )

Last edited May 8, 2014 at 10:00 AM by kernelnet, version 24