регистрация приложений в чистом проекте win32 - PullRequest
3 голосов
/ 16 декабря 2010

В веб-разработке у меня есть собственный фреймворк, который использует файл журнала, чтобы помочь мне в разработке и для отслеживания ошибок или производства. Этот веб-фреймворк, почти всегда работающий на * nix, использует простой простой текст, такой как logfile, logrotate и tail.

Сегодня я создаю приложение win32, которое будет работать в качестве сервера TCP / IP (это приложение для настольных компьютеров, но содержит некоторые службы), и мне нужно регистрировать события, чтобы знать, когда что-то пойдет не так (в процессе разработки , чтобы отладить, пока я его создаю).

Я помню MFC, в котором был макрос TRACE. Это было хорошо для отладки разработки. Есть ли что-то вроде TRACE в чистой разработке win32?

В журнале производства, каков наилучший подход к ведению журнала событий? Журнал событий Windows или простые текстовые файлы? как я могу повернуть его в Windows?

Спасибо, Даниэль Кох

Ответы [ 5 ]

2 голосов
/ 16 декабря 2010

log4c - это версия C широко используемой платформы log4j (см. Log4cxx выше, для C ++). Вы, конечно, можете настроить это для вывода данных, где вы хотите.

Он должен быть скомпилирован с использованием GCC, но после сборки вы сможете использовать библиотеки из программы, скомпилированной с помощью цепочки инструментов Microsoft.

Этот предыдущий вопрос охватывает некоторые другие варианты языка Си.

2 голосов
/ 16 декабря 2010

Для разработки обычно достаточно использовать OutputDebugString обёртку, подобную этой:

inline void logA(const char* format, ...)
{
    char buf[1024];
    wvsprintfA(buf, format, ((char*)&format) + sizeof(void*));
    OutputDebugStringA(buf);
}

#define DEBUG_LOG_A(format, ...) logA( \
        "(#" BOOST_PP_STRINGIZE( __LINE__ ) ") "__FUNCTION__ " : " \
        format, __VA_ARGS__)

и DebugView , чтобы посмотреть его.

0 голосов
/ 21 апреля 2019

Когда дело доходит до части разработки (эквивалент «TRACE»), не только это возможно, но вы можете устанавливать цвета и стили шрифта. Сначала вы звоните:

#include <conio.h>
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

Чтобы установить цвет текста, я использую:

inline void setcolor(int textcol, int backcol)
{
    if ((textcol % 16) == (backcol % 16))textcol++;
    textcol %= 16; backcol %= 16;
    unsigned short wAttributes = ((unsigned)backcol << 4) | (unsigned)textcol;
    CONSOLE_SCREEN_BUFFER_INFO csbi;
    SetConsoleTextAttribute(hConsole, wAttributes);
}

Затем просто используйте wprintf () для отображения текста. Если вы хотите очистить область отображения, просто позвоните:

system("cls");

Также обновите дисплей, позвонив по номеру:

void refresh()
{
    HWND hwnd = FindWindowEx(NULL, NULL, L"CabinetWClass", NULL);
    while (hwnd != NULL)
    {
        PostMessage(hwnd, WM_COMMAND, 41504, 0);
        hwnd = FindWindowEx(NULL, hwnd, L"CabinetWClass", NULL);
    }
}
0 голосов
/ 16 декабря 2010

Если вы можете использовать ATL в своем проекте, я предлагаю вам сделать это, если вас не пугает немного шаблонов C ++: -)

Это довольно легкая библиотека, но очень полезный для основных операций, вы также можете решить статически связываться с ним, что здорово, когда вы не хотите проблем с развертыванием.

И, возвращаясь к вопросу трассировки, он имеет ATLTRACE макрос, который очень полезен.

0 голосов
/ 16 декабря 2010

Тогда я успешно использовал log4cxx .

...