Thursday, June 20, 2013

Трассировка лёгкая как printf


Разобрался наконец как работать с переменным количеством аргументов, а точнее конструкцией ... в Си-шных функциях. Заодно написал полезняшку для отладки с помощью WinAPI-шной функции OutputDebugString, которая неудобна, т.к. принимает только строки, что заставляло меня писать громоздские конструкции для отладки.

Исходники void TraceString(const char *msg, ...) см. ниже



#include <cstdarg>#include <cstdarg>
...
void TraceString(const char *msg, va_list args)
{
   try
   {
      CString Msg;
      Msg.FormatV(msg,args);
      OutputDebugString(Msg);
   }
   catch (CMemoryException*)
   {
   }
   catch (std::bad_alloc&)
   {
   }
}

void TraceString(const char *msg, ...)
{
   va_list ArgList;  va_start(ArgList, msg);
   TraceString(msg, ArgList);
   va_end(ArgList);
}
...
int main()
{
   // Как её использовать? Как printf() -
   TraceString("%s\t%d\t%s\n", it->pinName, it->port, it->netName);
}

No comments:

Post a Comment