- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
回到 IOKit 的工作(El Capitan 带来的 USB 变化似乎相当彻底),我发现调试 kext panic 日志是后端的一个痛苦。
在我开发和测试时,是否可以将符号保留在内核扩展中,以便它们在panic.log 回溯中打印出来?
对于我的调试 KEXT,我尝试更改“复制期间剥离调试符号”设置(又名 COPY_PHASE_STRIP
)和“剥离链接产品”(又名 STRIP_INSTALLED_PRODUCT
)目标设置为NO
。
我的 panic 日志中仍然收到未符号化的输出。我是否只是运气不好,MacOS 根本无法做到这一点,或者我还缺少其他设置?
即而不是:
Anonymous UUID: A8A49864-0847-0BFD-AE70-67EE1BA71682
Fri Dec 18 07:43:19 2015
*** Panic Report ***
panic(cpu 3 caller 0xffffff8013d98fd9): Kernel trap at 0xffffff7f96f00056, type 14=page fault, registers:
CR0: 0x0000000080010033, CR2: 0x0000000000000018, CR3: 0x000000022c105000, CR4: 0x0000000000002660
RAX: 0x00000000c0a8bc01, RBX: 0x0000000000000000, RCX: 0x0000000000000000, RDX: 0x0000000000003dbd
RSP: 0xffffff811dd2b810, RBP: 0xffffff811dd2b8a0, RSI: 0x0000000027a3aee5, RDI: 0x00000000c0a8bc01
R8: 0x0000000000000000, R9: 0x0000000000000000, R10: 0x0000000000000000, R11: 0x0000000000000000
R12: 0xffffff811799b400, R13: 0xffffff8025bb6530, R14: 0x000000000000012c, R15: 0xffffff802a051980
RFL: 0x0000000000010296, RIP: 0xffffff7f96f00056, CS: 0x0000000000000008, SS: 0x0000000000000010
Fault CR2: 0x0000000000000018, Error code: 0x0000000000000000, Fault CPU: 0x3, PL: 0
Backtrace (CPU 3), Frame : Return Address
0xffffff811dd2b4a0 : 0xffffff8013c838c7
0xffffff811dd2b520 : 0xffffff8013d98fd9
0xffffff811dd2b700 : 0xffffff8013db7d83
0xffffff811dd2b720 : 0xffffff7f96f00056
0xffffff811dd2b8a0 : 0xffffff7f96f00571
0xffffff811dd2b9a0 : 0xffffff7f96f01490
0xffffff811dd2ba50 : 0xffffff7f96efaf85
0xffffff811dd2bab0 : 0xffffff7f94f8ea66
0xffffff811dd2baf0 : 0xffffff7f94f8e795
0xffffff811dd2bb50 : 0xffffff7f94f8e9c8
0xffffff811dd2bb90 : 0xffffff8013f2da05
0xffffff811dd2bcc0 : 0xffffff8013f16a0e
0xffffff811dd2bd50 : 0xffffff8013ef5ed0
0xffffff811dd2bdd0 : 0xffffff8013eeab70
0xffffff811dd2be50 : 0xffffff801419b207
0xffffff811dd2bef0 : 0xffffff801419b03e
0xffffff811dd2bf50 : 0xffffff80141fcf9f
0xffffff811dd2bfb0 : 0xffffff8013db8586
我很想看到:
Anonymous UUID: A8A49864-0847-0BFD-AE70-67EE1BA71682
Fri Dec 18 07:43:19 2015
*** Panic Report ***
panic(cpu 3 caller 0xffffff8013d98fd9): Kernel trap at 0xffffff7f96f00056, type 14=page fault, registers:
CR0: 0x0000000080010033, CR2: 0x0000000000000018, CR3: 0x000000022c105000, CR4: 0x0000000000002660
Fault CR2: 0x0000000000000018, Error code: 0x0000000000000000, Fault CPU: 0x3, PL: 0
Backtrace (CPU 3), Frame : Return Address
MyWorkOfArtKext::doSomething : 0xffffff8013c838c7
MyWorkOfArtKext::start : 0xffffff8013d98fd9
最佳答案
假设您没有显式删除符号,它们将保留在您的 kext 二进制文件中。问题是内核的动态加载器不会将它们保留在内存中。但是,您可以通过设置 keepsyms=1
内核参数(通过 nvram
boot-args
变量,或通过 com .apple.Boot.plist
in /Library/Preferences/SystemConfiguration/
) - 如果设置该标志,内核将保留 kext 和内核本身的符号,并用符号表示堆栈跟踪 panic 日志。
请注意,您仍然会获得 C 样式符号名称,因此您需要使用 c++filt
命令来整理所有 C++ 函数名称。
更新: 不幸的是,keepsyms=1
似乎并未受到 Apple Silicon/arm64e
内核的尊重。
关于macos - 默认情况下可以在紧急日志中显示调试 KEXT 符号吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34356393/
经过一周时间的Log4j2 RCE事件的发酵,事情也变也越来越复杂和有趣,就连 Log4j 官方紧急发布了 2.15.0 版本之后没有过多久,又发声明说 2.15.0 版本也没有完全解决问题,然
我是一名优秀的程序员,十分优秀!