我习惯于在Qt Creator中使用C ++进行开发,比Visual Studio更为重要。在前者中,您可以执行以下操作
qDebug()<< my_trace_string;
将my_trace_string输出到一个方便的“控制台”,以便您查看发生了什么。 我想知道是否存在一个Visual Studio窗口,应用程序可以独立于对话框和控件轻松地向其写入。这是对调试器的补充。例如,它留下了视觉痕迹。
答案 0 :(得分:3)
OutputDebugString()
(只是debuapi.h
)的 #include <windows.h>
是您的朋友。我通常将其包装成这样的函数(对于ASCII使用 A 后缀,对于UNICODE使用 W 后缀):
void dbgMsg(PCWSTR _format, ...)
{
va_list args;
va_start(args, _format);
WCHAR msg[MAX_PATH];
if(SUCCEEDED(StringCbVPrintfW(msg, sizeof(msg), _format, args))){
OutputDebugStringW(msg);
}
}
答案 1 :(得分:2)
在Visual Studio中,当使用GUI程序时,通常的方法是使用_RPTX(其中X是变量参数的数量)宏,当报表类型为_CRT_WARN时,它们会打印到VS自身内的“输出”窗口,而不是使用外部控制台窗口。
例如:
_RPT1(_CRT_WARN, __FUNCTION__ ": hWnd: %#x\r\n", m_hWnd);
我个人更喜欢使用以下(自定义)宏,它们不采用报告类型(我简单地使用_CRT_WARN),并且不需要知道vararg参数的数量以及能够接受4个以上vararg的能力。参数(默认宏的限制)。 _RPT宏从未更新过,无法利用可变参数宏的预处理器:
#if !defined(_RPTW)
#if defined(_DEBUG)
#define _RPTW(pszFmt, ...) _CrtDbgReportW(_CRT_WARN, NULL, __LINE__, NULL, (pszFmt), __VA_ARGS__)
#define _RPTWF(dest, fmt, ...) _CrtDbgReportW((dest), _T(__FILE__), __LINE__, NULL, (pszFmt), __VA_ARGS__)
#else
#define _RPTW(pszFmt, ...)
#define _RPTWF(dest, pszFmt)
#endif
#endif // #if !defined(_RPTW)
#if !defined(_RPTA)
#if defined(_DEBUG)
#define _RPTA(pszFmt, ...) _CrtDbgReport(_CRT_WARN, NULL, __LINE__, NULL, (pszFmt), __VA_ARGS__)
#define _RPTAF(dest, fmt, ...) _CrtDbgReport((dest), __FILE__, __LINE__, NULL, (pszFmt), __VA_ARGS__)
#else
#define _RPTA(pszFmt, ...)
#define _RPTAF(dest, pszFmt)
#endif
#endif // #if !defined(_RPTA)
#if !defined(_RPTT)
#if defined(_UNICODE)
#define _RPTT _RPTW
#define _RPTTF _RPTWF
#else
#define _RPTT _RPTA
#define _RPTTF _RPTAF
#endif
#endif // #if !defined(_RPTT)
使用自定义宏,原始示例变为:
_RPTA(__FUNCTION__ ": hWnd: %#x\r\n", m_hWnd);
原始方法的确具有将报告类型作为参数的好处,使用该输出可以重定向到窗口(如_ASSERT一样),输出窗口(具有_CRT_WARN的默认值)或跟踪文件(要求调用_CrtSetReportMode和_CrtSetReportFile)。
答案 2 :(得分:1)
AllocConsole
function为您的流程创建控制台。_cprintf()
将输出发送到控制台,并且不要忘记在使用SUPPLIER_GROUP_ATTRS = [
"id",
"count(products) as completed_products_count"
]
SupplierGroup.left_joins(:products).where("products.state=?","completed").select(SUPPLIER_GROUP_ATTRS).group(:id)
的任何地方包含#include FreeConsole()
; 有关更多详细信息,请参阅this link