首页 > 解决方案 > macOS 中是否有其他框架具有有用的环境变量,例如 CGBITMAP_CONTEXT_LOG_ERRORS

问题描述

如果您编写一些代码向 CoreGraphics 发送错误值,它会告诉您有关CGBITMAP_CONTEXT_LOG_ERRORS环境变量的信息:

CGBitmapContextCreate:不支持的参数组合:设置CGBITMAP_CONTEXT_LOG_ERRORS环境变量查看详情

这很有帮助!如果您设置,它甚至会为您提供错误的堆栈跟踪CG_NUMERICS_SHOW_BACKTRACE

错误:此应用程序或其使用的库已将无效数值(NaN 或非数字)传递给 CoreGraphics API,并且此值被忽略。请解决这个问题。2019-09-19 20:18:17.373382-0700 CGErrorsTest[22319:1448474] [com.example.CGErrorsTest] 如果要查看回溯,请设置 CG_NUMERICS_SHOW_BACKTRACE 环境变量。

macOS 或 iOS 中是否有其他框架具有类似的环境变量来提供额外的日志记录信息?

标签: macosdebugginglogging

解决方案


根据@defense2000x 的建议,我编写了一个 shell 脚本来在 /System/Library/Frameworks/ 中的所有框架上运行字符串,并grep为“env”编辑。这只出现了另外两个具有明显环境变量的框架:CoreAnimation 和 OpenCL。CA 里面有这个字符串:

未提交的 CATransaction。在调试环境中设置 CA_DEBUG_TRANSACTIONS=1。

OpenCL 有这个:

未知的 CL_LOG_ERRORS 环境变量设置:“%s”。预期:{ 控制台、标准错误、标准输出 }

错误:未知 CL_LOG_ERRORS 环境变量设置:“%s”

错误:忽略未知的 CL_LOG_ERRORS 环境变量设置:“%s”

目前尚不清楚可以采用什么值,但由于 OpenCL 在 macOS 上已被弃用,我想这并不重要。

这是我用来查找上述内容的脚本:

#!/bin/sh

LIBS=`ls -1 /System/Library/Frameworks/`

for LIB in $LIBS; do
    LIB_NO_FRAMEWORK=`echo $LIB | awk -F\. '{ print $1; }'`;
    FULL_LIB=$LIB/Versions/Current/$LIB_NO_FRAMEWORK
    echo working on: $FULL_LIB;
    strings $FULL_LIB | grep -i "env"; 
done

推荐阅读