值得一看可能需要的修复或功能原始 payload 包含 5 个 merge commit 与 8 个 non-merge commit;下方覆盖全部 non-merge commit。它不含 superseded_by 标记,也没有 deprecation notice。仅版本文件已忽略。
日志检查保留 MAB 文件,并新增跨平台调用方追踪
本期主要加固 TSynLog 周边工具,不改变 backend 协议。日志读取器不再因空 profiler 数据或纯文本选择而崩溃,TDebugFile 也不再删除无法读取的外部 .mab 文件。FreeBSD、FPC 与 Android 获得 socket/POSIX 兼容修复,调用方符号发现现在可通过 TDebugFile 覆盖所有受支持编译器。
要点
- 应采用 build 2.4.17019 的 fc996116ae8a2534c5e763ac180649cdb78013ab。
- TDebugFile.Create 不再删除通过 aExeName 提供但无法读取的外部 .mab 文件。
- TSynLogFile 与 TSynLogFileView 现在可安全处理无 sllEnter 的日志、纯文本剪贴板行与空 level filter。
- FreeBSD UNIX-domain socket 大小以及后续 FPC、BSD、Android 编译修复已在最终 build 完成。
- 新增 TDebugFile.AppendCallerShort;无文本的 TSynLog.Enter 或 Log 现在在 FPC 与 Delphi 上都能解析调用方信息。
- Lazarus package 重新生成 mormot2.pas 时现在会保留 mormot.crypt.pkcs11。
升级建议
请采用 build 2.4.17019。若 LogView 会打开外部 .mab、日志可能不含 sllEnter,或需支持 FreeBSD、FPC BSD、Android,应尽快升级。重新构建各平台 package,测试纯文本复制与空 filter,并确认自动调用方符号是否改变日志量或热路径成本。原始 payload 没有 superseded_by 标记,因此不声明避开区间。
8 条中的 8 条 · 上游 13 次提交
1
高
空日志与纯文本日志不再使 viewer 出错
无 sllEnter event 时,TSynLogFile.SetLogProcMerged 不再访问 profiler array。fLevels 为 nil 时,TSynLogFileView.GetLineForClipboard 返回原始行;Select 在处理空 event filter 前清除 fSelectedCount。TTestCoreBase.Debugging 新增回归测试。
修复
mormot.core.log
a01ae51e+56-8
core: fixed TSynLogFile/TSynLogFileView edge cases found by the LogView tool
影响
LogView 与自定义分析器在无方法 profiling 的日志上避免 nil 或越界访问,可复制纯文本行,并在取消全部 level 后正确显示零行。
建议升级
升级日志分析工具,并测试纯文本文件、无 sllEnter 的日志以及取消全部 level filter。
公开 API
TSynLogFile.SetLogProcMergedbehaviour-changed — 在无 sllEnter 的日志上启用 merged profiling 时,现在保留空 profiler,不再解引用空 array。TSynLogFileView.GetLineForClipboardbehaviour-changed — 纯文本文件现在返回所选原始行,越界 row 返回空字符串。
2
高
无法读取的外部 MAB 文件不再被删除
cache timestamp 匹配时,TDebugFile.Create 仍会尝试 LoadMab,但加载不到 block 或 symbol 时不再调用 DeleteFile。
修复
mormot.core.log
4ca916cb+1-3
core: TDebugFile.Create() won't delete an unreadable .mab file
影响
像 LogView 那样通过 aExeName 传入用户选择的 .mab 时,不会再仅因文件不可读、损坏或不兼容而删除它。cache 加载失败后仍会回退解析 .map 或 .dbg。
建议升级
升级所有会打开用户 MAB 的工具,并在允许选择文件前测试损坏与只读输入。
公开 API
TDebugFile.Createbehaviour-changed — 无法读取的 MAB 会被保留,不再于 fallback 符号加载前删除。
3
高
平台 merge 后 BSD、FPC 与 Android 编译路径完成统一
后续修复让 CPU_ARCH_TEXT 使用 CPUAARCH64,使 PosixStatFS 在两种编译器上都接受 pointer,按 DELPHIPOSIX 选择 Android st_ino 字段,修正条件 socket 语法与 FPC shift cast,并通过 LibraryOpen/LibraryResolve 加载 getifaddrs。
编译器与平台
mormot.core.os+4
e68dce4a+17-20
all: some fixes after #598
影响
合并后的 Delphi Android 工作与 FreeBSD socket-size 修改可在 Delphi/FPC POSIX target 上正确编译。Android 文件标识采用对应 RTL 字段,FPC 在此不再依赖直接 dlopen 声明。
建议升级
Delphi Android、FPC BSD 或 AArch64 build 应采用 2.4.17019,并重新运行完整编译矩阵,不要单独摘取早期平台 commit。
公开 API
PosixStatFSsignature-changed — Info 参数现在在 FPC 与 Delphi 上均为 pointer,不再在 FPC 上使用 PStatfs。
4
中
Lazarus package 保留 PKCS #11 支持
packages/lazarus/mormot2.lpk 将 mormot.crypt.pkcs11 添加为 item 114,后续项目顺移,声明文件数从 123 增至 124。
修复
mormot.crypt.pkcs11
7b98b09a+24-20
packages: added mormot.crypt.pkcs11 to the Lazarus package
影响
打开或重建 Lazarus package 时,不再生成缺少 mormot.crypt.pkcs11 的 mormot2.pas。直接引用 unit 与 Delphi 项目不受影响。
值得一看
重建 Lazarus package,并确认生成的 umbrella unit 仍包含 mormot.crypt.pkcs11。
5
中
UNIX socket 地址采用 FreeBSD 原生大小
有 sun_len 的平台上,TSockAddrUnix 使用 104-byte sun_path,其他平台使用 108 bytes。SOCKADDR_SIZE 跟随该 layout,TNetAddr.Size 与 SetFamily 显式处理 AF_UNIX。
修复
mormot.net.sock+1
b6262622+22-9
net: fixed TSockAddrUnix size for FreeBSD
影响
FreeBSD 与其他含 sun_len 的 target 不再传入过大的 sockaddr_un buffer,也不再为 AF_UNIX 报告通用存储大小。Linux 与 Windows layout 不变。
建议升级
FreeBSD/BSD UNIX-domain socket 应使用 build 2.4.17019,并以最大路径长度重新测试 bind/connect。
公开 API
SOCKADDR_SIZEbehaviour-changed — 在 socket record 含 sun_len 的平台上,此公开常量从 110 改为 106。
6
中
调用方符号可在不分配 heap 的情况下追加
TDebugFile.AppendCallerShort 捕获最多 62 个原始 frame,去重后把解析位置追加到 ShortString。RawStackTrace 与 StackTrace 共用,并在 Delphi/FPC 探测 frame 时屏蔽被拦截异常。
新功能
mormot.core.log
19b48603+186-111
core: new TDebugFile.AppendCallerShort method
影响
日志与诊断代码在 FPC 和 Delphi 上都可获得紧凑调用方位置,无需构造 RawUtf8 结果。符号质量仍取决于可用的 .map、.gdb 或 .mab 数据。
公开 API
TDebugFile.AppendCallerShortadded — 此新 class procedure 将 aSkip/aDepth 指定的已解析 stack 位置追加到调用方提供的 ShortString。
7
中
无文本 TSynLog entry 可在所有 target 上识别调用方
aMethodName=nil 的 TSynLog.Enter 与 TSynLog.Log(Level) 会在获取 writer lock 前调用 TDebugFile.AppendCallerShort。LogEnter 接受预计算的 PShortString location,并移除原 Delphi-only 地址捕获。
新功能
mormot.core.log
fc996116+74-145
core: TSynLog.Enter/Log with no text nor method name will use caller info
影响
有 debug 数据时,FPC 日志现在可包含与 Delphi 相同的调用方符号上下文。故意省略文本的调用会捕获 stack,且可能输出更多文本,因此应测量热日志路径。
值得一看
检查无文本 Enter/Log 调用,确认需要新的调用方文本,并使用生产 debug artifact 对高频路径进行 benchmark。
公开 API
TSynLog.Enterbehaviour-changed — aMethodName 为 nil 时,现在在 FPC 与 Delphi 上都会触发 TDebugFile 调用方解析。TSynLog.Logbehaviour-changed — 仅接收 level 的 overload 现在会在可用时追加已解析的调用方位置。
8
低
POSIX host record 对齐原生 C 字段类型
内部 hostent.h_length 声明从 TSockLen 改为 cint,以匹配 C ABI。sockaddr_dl 注释得到澄清,layout 不变。
编译器与平台
mormot.net.sock.posix
de2e5034+4-4
net: minor cleanup after latest PR
影响
POSIX 名称解析 binding 在 FPC 与 Delphi 上采用原生整数类型;应用 API 与 Windows 行为不变。