如何解决“分段错误(核心已转储)”


15

我正在使用Ubuntu 14.04。

安装某些应用程序后,我遇到了分段错误(核心转储)错误。

这是什么意思 ?我该如何解决这个问题?

例如

安装chrome-stable之后,从终端启动时会遇到此错误。


某些二进制程序崩溃了,但这是非常特定于崩溃的程序,因此您可能需要告诉我们产生该程序的程序,也可以尝试对其进行更新。
夸德佩珀2015年


1
由于它是封闭源代码,因此您最好向GooGle叔叔提出错误报告!
user.dz 2015年

1
好SH :)我会问叔叔; P
Ravan

1
尝试删除它的首选项和缓存sudo rm -rf ~/.config/google-chrome ~/.cache/google-chrome。然后以隐身模式运行google-chrome --incognito
user.dz 2015年

Answers:


12

这是什么意思?

请参阅AU:什么是分段错误?还有一些如何重现它的示例,所以:什么是分段错误?。我可以提供的最简单的描述(可能不是完美的):

该程序试图访问其自身区域之外的存储区域。操作系统阻止了它。

某些情况:用初始化的指针读取值,超出数组范围,调用函数(不保持向后兼容性时),...

但是,使用大型程序或那些依赖其他项目库的程序往往很难找到原因。大多数情况下,最终都会针对目标程序或相关程序(上游项目或下游分发程序包)给出错误报告。

我该如何解决这个问题?

如果您未进行任何自定义配置/设置,并且已安装所有更新。生成错误报告,请参阅如何报告错误?

如果Ubuntu支持开源,请使用ubuntu-bugapport-bug)。对于第三方关闭源,请查看其帮助页面如何报告错误并收集相关数据。


注意:如果您甚至没有一点编程背景,建议您尽力解决该问题。多年来,有许多错误报告处于无效状态。或者至少收集足够的调试数据以在报告问题之前解决问题。

一些有用的调试工具

  1. apport-bug 日志/核心转储/回溯

    如果您没有细分错误之前的错误消息。使用--saveoption 运行它,并查找回溯日志:

    apport-bug program-cmd --save bug-report_output.txt
    
  2. gdb 回溯/调试源代码

    如果不起作用,请使用gdb

    $ gdb program-cmd
    (gdb) run
    (gdb) backtrace
    

    如果收到任何错误消息,请检查网站,启动板和上游项目错误跟踪器中是否有类似情况。

    对于某些高级用户或遵循ac / c ++学习路径的用户,他们可以下载相应的-dbg符号包。然后,您可以gdb用来跟踪通过源的程序流,并获得引起运行时错误的确切功能/指令。

  3. strace 系统调用跟踪

    strace我喜欢它,这可能是另一个有用的工具。这确实是一个强大的工具。

    它展示了自己:

    在最简单的情况下,strace运行指定的命令直到其退出。它截获并记录由进程调用的系统调用和由进程接收的信号。每个系统调用的名称,其参数及其返回值都会在标准错误或使用-o选项指定的文件上显示。

    strace是有用的诊断,说明和调试工具。系统管理员,诊断人员和疑难解答人员将发现,对于解决程序源问题不可用的问题,它无价之宝,因为无需重新编译它们即可跟踪它们。学生,黑客和过于好奇的人会发现,即使跟踪普通程序,也可以学到很多有关系统及其系统调用的知识。而且程序员会发现,由于系统调用和信号是在用户/内核界面上发生的事件,因此仔细检查此边界对于错误隔离,健全性检查和尝试捕获竞争状况非常有用。

    资源: man strace

  4. ltrace 动态库调用跟踪

    ltrace是一个仅运行指定命令直到退出的程序。它截取并记录由执行的进程调用的动态库调用以及该进程接收的信号。它还可以截取并打印程序执行的系统调用。

    它的用法与strace(1)非常相似。

    资源: man ltrace

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.