首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有用于basic win32 C++的跟踪语句?

问是否有用于basic win32 C++的跟踪语句?
EN

Stack Overflow用户
提问于 2009-01-16 20:00:16
回答 7查看 11K关注 0票数 8

在MFC C++ (Visual Studio6)中,我习惯于使用跟踪宏来进行调试。对于普通的win32,有没有等价的语句?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-01-16 20:35:28

_RPTn工作得很好,尽管不是很方便。将MFC TRACE语句重新创建为允许可变数目参数的函数的Here is some code。还添加了TraceEx宏,该宏预置了源文件和行号,以便您可以单击返回到语句所在的位置。

更新: CodeGuru上的原始代码不能在发布模式下为我编译,所以我更改了在发布模式下删除跟踪语句的方式。这是我放到Trace.h中的完整源代码。感谢Thomas Rizos的原版

代码语言:javascript
复制
// TRACE macro for win32
#ifndef __TRACE_H__850CE873
#define __TRACE_H__850CE873

#include <crtdbg.h>
#include <stdarg.h>
#include <stdio.h>
#include <string.h>

#ifdef _DEBUG
#define TRACEMAXSTRING  1024

char szBuffer[TRACEMAXSTRING];
inline void TRACE(const char* format,...)
{
    va_list args;
    va_start(args,format);
    int nBuf;
    nBuf = _vsnprintf(szBuffer,
                   TRACEMAXSTRING,
                   format,
                   args);
    va_end(args);

    _RPT0(_CRT_WARN,szBuffer);
}
#define TRACEF _snprintf(szBuffer,TRACEMAXSTRING,"%s(%d): ", \
                &strrchr(__FILE__,'\\')[1],__LINE__); \
                _RPT0(_CRT_WARN,szBuffer); \
                TRACE
#else
// Remove for release mode
#define TRACE  ((void)0)
#define TRACEF ((void)0)
#endif

#endif // __TRACE_H__850CE873
票数 9
EN

Stack Overflow用户

发布于 2009-01-16 20:05:38

在msdn文档中,Macros for Reporting

您可以使用CRTDBG.H中定义的_RPTn和_RPTFn宏来代替使用

语句进行调试。当没有定义_DEBUG时,这些宏在您的发布版本中自动消失,因此没有必要将它们包含在#ifdefs.

中

票数 3
EN

Stack Overflow用户

发布于 2009-01-16 22:16:14

还有OutputDebugString。但是,在编译发行版时不会将其删除。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/451749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档