Ravan Asked: 2015-10-28 03:44:51 +0800 CST2015-10-28 03:44:51 +0800 CST 2015-10-28 03:44:51 +0800 CST 如何解决“Segmentation fault (core dumped)” 772 我正在使用 Ubuntu 14.04。 安装一些应用程序后,我遇到了分段错误(核心转储)错误。 这是什么意思 ?我该如何解决这个问题? 例如: 安装 chrome-stable 后,当我从终端启动它时遇到此错误。 14.04 1 个回答 Voted Best Answer user.dz 2015-11-30T16:09:36+08:002015-11-30T16:09:36+08:00 这是什么意思? 请参阅AU:什么是分段错误?帖子和这篇帖子有一些如何重现它的例子,所以:什么是分段错误?. 我能提供的最简单的描述(可能并不完美): 该程序试图访问其自身部分之外的内存区域。操作系统阻止它。 一些情况:用未初始化的指针读取值,超出数组范围,函数调用(当不保持向后兼容性时),...... 但是,找到大型程序或依赖其他项目库的程序的原因并不总是那么容易。大多数情况都以目标程序或其依赖项之一(上游项目或下游分发包)的错误报告告终。 我该如何解决这个问题? 发出错误报告 如果您没有进行任何自定义配置/设置并且您安装了所有更新。触发错误报告,请参阅如何报告错误? 如果 Ubuntu 支持开源,请使用ubuntu-bug( apport-bug)。对于 3rd 方闭源,查看他们的帮助页面如何报告错误和收集相关数据。 主动调试 如果你有一点编程背景,建议你尽量自己解决。多年来,许多错误报告都处于非活动状态。至少,您可以收集足够的调试数据来帮助解决报告问题。 这意味着您正在打破用户抽象级别并打开黑匣子!(FLOSS其实是有透明盒子的)。 一些有用的调试工具 一些...我的意思是还有许多其他有用的工具,当你深入挖掘时你会发现它们。 apport-bug日志/核心转储/回溯 如果在分段错误之前没有错误消息。使用选项运行它--save并查找回溯日志: apport-bug program-cmd --save bug-report_output.txt gdb回溯/调试源代码 如果它不起作用,请使用gdb: $ gdb program-cmd (gdb) run (gdb) backtrace 如果您收到任何错误消息,请检查网络、启动板和上游项目错误跟踪器中是否有任何类似情况。 对于一些高级用户或者正在走ac/c++学习之路的用户,可以下载相应的-dbg符号包。然后,您可以使用它gdb来跟踪源代码中的程序流,并获取引发运行时错误的确切函数/指令。 对于基于 Ubuntu(Debian) 的发行版,可以使用以下方式下载软件包的源代码: apt-get source <package-name> strace系统调用追踪 另一个可能有用的工具是strace,我喜欢它。这真是一个强大的工具。 它呈现自己: 在最简单的情况下strace运行指定的命令直到它退出。它拦截并记录进程调用的系统调用和进程接收的信号。每个系统调用的名称、它的参数和它的返回值都打印在标准错误上或打印到用 -o 选项指定的文件中。 strace是一种有用的诊断、指导和调试工具。系统管理员、诊断人员和故障排除人员会发现它对于解决源代码不易获得的程序的问题具有无可估量的价值,因为它们不需要重新编译来跟踪它们。学生、黑客和过于好奇的人会发现,即使是通过跟踪普通程序,也可以了解有关系统及其系统调用的大量信息。程序员会发现,由于系统调用和信号是发生在用户/内核接口上的事件,因此仔细检查此边界对于错误隔离、完整性检查和尝试捕获竞争条件非常有用。 资源: man strace ltrace动态库调用跟踪 ltrace是一个简单地运行指定命令直到退出的程序。它拦截并记录被执行进程调用的动态库调用以及该进程接收到的信号。它还可以拦截并打印程序执行的系统调用。 strace它的使用与(1)非常相似。 资源: man ltrace
这是什么意思?
请参阅AU:什么是分段错误?帖子和这篇帖子有一些如何重现它的例子,所以:什么是分段错误?.
我能提供的最简单的描述(可能并不完美):
一些情况:用未初始化的指针读取值,超出数组范围,函数调用(当不保持向后兼容性时),......
但是,找到大型程序或依赖其他项目库的程序的原因并不总是那么容易。大多数情况都以目标程序或其依赖项之一(上游项目或下游分发包)的错误报告告终。
我该如何解决这个问题?
发出错误报告
如果您没有进行任何自定义配置/设置并且您安装了所有更新。触发错误报告,请参阅如何报告错误?
如果 Ubuntu 支持开源,请使用
ubuntu-bug
(apport-bug
)。对于 3rd 方闭源,查看他们的帮助页面如何报告错误和收集相关数据。主动调试
如果你有一点编程背景,建议你尽量自己解决。多年来,许多错误报告都处于非活动状态。至少,您可以收集足够的调试数据来帮助解决报告问题。
这意味着您正在打破用户抽象级别并打开黑匣子!(FLOSS其实是有透明盒子的)。
一些有用的调试工具
一些...我的意思是还有许多其他有用的工具,当你深入挖掘时你会发现它们。
apport-bug
日志/核心转储/回溯如果在分段错误之前没有错误消息。使用选项运行它
--save
并查找回溯日志:gdb
回溯/调试源代码如果它不起作用,请使用
gdb
:如果您收到任何错误消息,请检查网络、启动板和上游项目错误跟踪器中是否有任何类似情况。
对于一些高级用户或者正在走ac/c++学习之路的用户,可以下载相应的
-dbg
符号包。然后,您可以使用它gdb
来跟踪源代码中的程序流,并获取引发运行时错误的确切函数/指令。对于基于 Ubuntu(Debian) 的发行版,可以使用以下方式下载软件包的源代码:
strace
系统调用追踪另一个可能有用的工具是
strace
,我喜欢它。这真是一个强大的工具。它呈现自己:
资源:
man strace
ltrace
动态库调用跟踪资源:
man ltrace