当前位置:  开发笔记 > 编程语言 > 正文

OS X相当于OutputDebugString()?

如何解决《OSX相当于OutputDebugString()?》经验,为你挑选了2个好方法。

我正在研究将现有Windows MFC控件移植到OS X/Carbon的可行性.我的测试台是使用XCode 3向导生成的C++ Carbon应用程序.

我正在寻找一种快速方法将一些跟踪信息转储到调试器或OS X等效的DbgView.在Win32上我会使用OutputDebugString() - OS X上的交易是什么?有没有办法从Carbon应用程序查看写入std :: cout的测试?

谢谢

杰瑞



1> Jason Coco..:

没有真正的等价物.Xcode使用GDB,所以你基本上都在处理它.但是,您可以自己实现它.只有在调试器存在时,下面的代码示例才会生成输出到标准输出.如果在编译时存在NDEBUG,则可以通过将其作为宏包装在预处理程序指令中并将其编译出来(或者转换为内联nil函数)来进一步保护它.应用程序生成的任何输出都将定向到Xcode中的调试控制台.

extern "C" {

bool IsDebuggerPresent() {
    int mib[4];
    struct kinfo_proc info;
    size_t size;

    info.kp_proc.p_flag = 0;
    mib[0] = CTL_KERN;
    mib[1] = KERN_PROC;
    mib[2] = KERN_PROC_PID;
    mib[3] = getpid();

    size = sizeof(info);
    sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, NULL, 0);

    return ((info.kp_proc.p_flag & P_TRACED) != 0);
}

void OutputDebugString(const char *restrict fmt, ...) {
    if( !IsDebuggerPresent() )
        return;

    va_list args;
    va_start(args, fmt);
    vprintf(fmt, args);
    va_end(args);
}

}


写入stderr而不是stdout要好一些,这样它就不会被缓冲了.

2> Peter Hosey..:

首先,Carbon不会也不会以64位的形式提供.如果Apple掉线32位Mac OS X(可以安全地假设迟早会发生),你的应用程序将无法运行.使用Cocoa.

也就是说,有几种方法可以进行日志记录:

    的NSLog

    这是一个Cocoa函数,但您也可以在Carbon应用程序中使用它.链接基础框架,但不包括标题.自己声明:

    int NSLog(CFStringRef format, ...);
    

    您将传递CFSTR文字作为格式:

    NSLog(CFSTR("Count: %u"), count);
    

    NSLog的优点是您可以使用%@ formatter打印CF属性列表对象(字符串,数据对象,日期,数字,数组和字典).例如:

    CFArrayRef array = /*...*/;
    NSLog(CFSTR("Array: %@"), array);
    

    的printf/fprintf中

    旧的C标准库备用.#include 得到他们.在GUI应用程序中并不重要,但您应该使用stderr来保持清洁:fprintf(stderr, "Count: %u\n", count);

    系统日志

    大约和f?printf一样久,我猜,但更强大.这是一个实际的日志记录系统,而不仅仅是写入文件.您可以指定优先级之类的内容,允许您在beta测试人员的系统上抑制调试日志消息,同时仍然可以在您自己的系统上读取它们.(最终版本根本不应包含日志代码.)

    asl_log

    作为Apple System Logger的一部分,Apple是syslog的更普遍的替代品.我在博客上有一系列关于ASL的帖子.

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有