这需要在linux上运行,但理想情况下适用于任何符合POSIX标准的系统.在最坏的情况下,如果我无法捕获seg故障并在运行JIT中获取IP,我希望能够将其捕获到外部(内核日志?),并且可能只是让编译器转储一个大文件将地址映射到指令,我可以将其与Python脚本或其他东西匹配.
任何想法/建议表示赞赏.如果您曾经使用过自己的编译器项目,请随意分享您自己的调试技巧.
解决方法 如果使用sigaction,则可以定义一个带有3个参数的信号处理程序:voID (*sa_sigaction)(int signum,siginfo_t *info,voID *ucontext)
传递给信号处理程序的第三个参数是指向OS和体系结构特定数据结构的指针.在linux上,它是一个ucontext_t,它在< sys / ucontext.h>中定义.头文件.其中,uc_mcontext是一个mcontext_t(机器上下文),对于x86,它包含gregs中信号时的所有寄存器.所以你可以访问
ucontext->uc_mcontext.gregs[REG_EIP] (32 bit mode)ucontext->uc_mcontext.gregs[REG_RIP] (64 bit mode)
获取错误指令的指令指针.
总结以上是内存溢出为你收集整理的linux – 获取有关分段错误或崩溃的指令指针(对于x86 JIT编译器项目)?全部内容,希望文章能够帮你解决linux – 获取有关分段错误或崩溃的指令指针(对于x86 JIT编译器项目)?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)