Один из простейших способов отладки DLL (C/C++), работающей с именованной памятью

Автор записи: Дмитрий (Admin)
1 звезда2 звезды3 звезды4 звезды5 звезд (Голосов 3, среднее: 5,00 из 5)
Загрузка...

C_C++ основы
Создайте/откройте текстовый файл для записи отладочной информации (каждый новый вызов данного кода будет перезаписывать содержимое файла):

FILE *f = fopen("C:\\DLL_Log.txt", "w+"); // Создает файл лога

Открывайте потом этот файл для чтения в Notepad++.

Объявите следующую функцию:

static void Log(int Line, char *Str = " ")
{
   char DebugLine[256] = "";
   sprintf_s(DebugLine, "Строка: %u %s\n", Line, Str);
   if (pb != NULL) { sprintf_s(DebugLine, "%s   в памяти:%s", DebugLine, pb); }
   fwrite(DebugLine, sizeof(DebugLine), 1, f);
   fwrite("\n", sizeof("\n"), 1, f);
   fflush(f);
}

(Если указатель на память у Вас объявлен отличным от pb (PBYTE pb;), то поменяйте указатель pb в вышеописанной функции на Ваш)

Затем вставляйте в код DLL следующие строки:

Log(__LINE__);
//ИЛИ
Log(__LINE__, "Какой-то поясняющий текст");

Если строка "Log(__LINE__);" была размещена в 164-й строке исходного кода DLL, а в именованной памяти в тот момент находилась запись "_QW_" то при выполнении DLL в файл запишется следующий текст:

 Строка: 164  
   в памяти:_QW_ 

Если в то же место поместить строку "Log(__LINE__, "Какой-то поясняющий текст");", то в файл запишется следующее:

 Строка: 164 Какой-то поясняющий текст
   в памяти:_QW_

P.S. "__LINE__" в C/C++ является встроенной константой, которая содержит в себе номер строки, в которой она указана.

Если у Вас появились какие-то вопросы, задайте их в комментариях под статьей !!!

Добавить комментарий