c++ - 崩溃报告中的 CPU 寄存器地址对分析有何帮助?

标签 c++ macos crash processor

Apple 生成了这些崩溃日志,我的线程 0 崩溃了,但这个问题与此无关。这是一般性问题,我想知道我们如何在崩溃分析中使用这些处理器寄存器值?他们如何帮助您调查事故?我唯一想到的是,如果任何寄存器有 NULL 指针,例如下面的 rcx,这让您了解代码中可能的空指针取消引用,这是正确的假设吗?

Thread 0 crashed with X86 Thread State (64-bit):
  rax: 0x00000001046e17a0  rbx: 0x00000001043665f0  rcx: 0x0000000000000000  rdx: 0x00000001046e14f0
  rdi: 0x00000001046e14e0  rsi: 0x00000001046314e8  rbp: 0x00007fff5b89f890  rsp: 0x00007fff5b89f7e0
   r8: 0x00007fff686a7690   r9: 0x0000000000000250  r10: 0x00007fffa2478201  r11: 0x000000000009ea18
  r12: 0x00000001046b11d8  r13: 0x00007fff686a75c8  r14: 0x00007fff686ae638  r15: 0x0000000000000000
  rip: 0x00000001043601be  rfl: 0x0000000000010206  cr2: 0x0000000000000060

Logical CPU:     0
Error Code:      0x00000004
Trap Number:     14

最佳答案

您可以使用寄存器 RIP(指令指针)来确定它在哪条机器指令上失败。我不确定 GDB 是否可以在 Mac OSx 上运行,但在 Linux 中您可以使用 GDB(GNU 调试器)然后分析汇编指令以找到产生错误的确切指令。另外,寄存器RBP(Frame Pointer)和RSP(Stack Pointer)分别指向内存中的栈底和栈顶。了解所有这些后,您就可以准确查看崩溃时堆栈的内容以及导致崩溃的指令。

关于c++ - 崩溃报告中的 CPU 寄存器地址对分析有何帮助?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39782223/

相关文章:

c++ - 访问其用户定义的析构函数已启动但未完成的对象真的是 UB 吗?

xcode - 在 mac 上开始使用 Git + GitX 和 Xcode 项目的快速指南?

c++ - 没有智能指针经验的多态对象的转换类型

c++ - 使用 live555 渲染 RTSP H.264 视频流

在 mac osx 上用纯 c 创建窗口应用程序

macos - 波浪号在 Mac 终端中无法识别

c++ - 从QAbstractItemModel正确删除子树

reactjs - 当用户选择一个选项但随后将其更改为另一个选项时,React 崩溃而不显示错误

iphone - 在循环中使用CTFontRef创建NSMutableAttributedString时出现问题

c++ - 模板模板参数偏特化c++