-
-
[原创]复杂程序中的常用调试代码
-
发表于:
2012-12-1 14:44
5513
-
在我参加实际项目开发中,对于一些大型复杂的项目的调试往往感到力不从心。即使vs或者gdb已经足够强大,在一些并发的程序或者让人头痛的多线程程序中,你要去设置个断点来调试往往是噩梦的开始。实践告知我们,这个时候用print往往返璞归真成为最有效的调试手段,但限于其功能的局限型,我们可以单独写一些工具宏(函数),给我们调试带来便利。
例如在我们一个大型gis平台中(win32、wince)常用下列工具来调试:
#ifndef DEBUG_INFO
#ifdef _DEBUG
#ifdef WINCE
#define DEBUG_INFO(info) /
{ /
ConsoleInfoOut(info) /
} /
#define ConsoleInfoOut(info) /
{ /
wstring m_output_info; /
wostringstream iss; /
iss << info; /
m_output_info = iss.str(); /
OutputDebugStringW(m_output_info.c_str()); /
} /
//OutputDebugStringW(L"/n"); /
#define DEBUG_INFO_MEMORY(info) /
{ /
DEBUG_INFO(info); /
MEMORYSTATUS mst; /
mst.dwLength = sizeof(MEMORYSTATUS); /
GlobalMemoryStatus(&mst); /
OutputDebugStringW(L"total phys: "); /
DEBUG_INFO(mst.dwTotalPhys); /
OutputDebugStringW(L" avail phys:"); /
DEBUG_INFO(mst.dwAvailPhys); /
OutputDebugStringW(L" total virtual:"); /
DEBUG_INFO(mst.dwTotalVirtual); /
OutputDebugStringW(L" avail virtual:"); /
DEBUG_INFO(mst.dwAvailVirtual); /
} /
#else // WINCE
#define DEBUG_INFO(info) std::cerr << info << endl;
#endif // DEBUG
#else
#define DEBUG_INFO(info)
#endif // #ifdef _DEBUG
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课