正在运行的应用程序以“分段错误”结尾


Answers:


63

段故障是存储器访问冲突的结果。该程序已在分配给它的内容之外引用了一个内存地址,并且OS内核通过使用SIGSEGV杀死该程序来做出响应。

这是一个错误,因为尝试访问不可访问的内存没有任何意义(无法完成)。但是,这种错误很容易犯,特别是在诸如C和C ++(占很多常见应用程序)的语言中。它表示程序本身或链接到的库中的错误。如果您希望报告该错误(执行-这会有所帮助),则最好包含导致段错误的事件的回溯

为此,您可以在内部运行该程序gdb(GNU调试器),如果尚未安装该程序,则可以从任何Linux发行版中获得(该程序包仅称为“ gdb”)。如果损坏的应用程序称为“ brokenapp”:

gdb brokenapp

将会出现有关版权和许可的段落,最后带有光标的提示:

(gdb) _ 

键入run并按Enter键。如果您需要提供参数(例如-x --foo=bar whatever),请附加这些参数(run -x --foo=bar whatever)。该程序将执行其操作,您将看到输出,如果需要进行交互,您可以(请注意,您可以在gdb中运行任何类型的程序,包括GUI程序)。在通常出现段错误的地方,您将看到:

Program received signal SIGSEGV, Segmentation fault.
0x00000000006031c9 in ?? ()
(gdb) _

输出的第二行只是一个示例。现在键入bt(用于“ backtrace”),然后按Enter。您会看到类似这样的内容,尽管可能会更长:

(gdb) bt
#0  0x00000000006031c9 in ?? ()
#1  0x000000000040157f in mishap::what() const ()
#2  0x0000000000401377 in main ()

如果时间更长,那么您一次只能进行一次筛选,并且会有一条--More--消息。继续按Enter键直到完成。现在quit,您可以将输出保留在终端中。从头Program received signal SIGSEGV开始将所有内容复制到文本文件,并使用应用程序的错误跟踪器提交错误报告;您可以通过搜索(例如“ brokenapp bug报告”)在线找到这些文件-您可能需要注册才能通过电子邮件将回复发送给您。包括您对问题的描述,您提供给的所有参数run等,以及回溯的副本(如果很长,可能有一种在错误跟踪器界面中附加文本文件的方法)。如果您知道它是什么,也请包括该版本(brokenapp --version可能有用,或者手册页可能指示如何获得此版本),

希望不久后有人会回复您。提交错误通常令人赞赏。


1
细分错误也可能在解释器语言中发生(主要是因为解释器本身存在错误),
Braiam 2014年

这超级有用!有可能进入吗?设置一个停止标记并尝试查找更多信息?
Zloy Smiertniy

1
@ZloySmiertniy gdb很多事情。您想单击以了解第5.1节
goldilocks'Aug

11

这意味着该应用程序存在错误。

  • 如果您是最终用户,则应与应用程序供应商联系。

    • 如果是Linux发行版,则应为该发行版创建错误报告。
    • 对于第三方非商业应用程序,您应将错误报告给作者或此特定的应用程序错误跟踪器。通常,您可以通过浏览应用程序站点或下载的二进制/源程序包找到位置。
    • 对于商业应用,您应该与支持人员联系。
  • 如果是您自己的应用程序,则可以:

    1. 启用核心文件: $ ulimit -c unlimited
    2. 重现崩溃: $ ./yourapp
    3. 用gdb调试崩溃: $ gdb ./yourapp core

核心文件对您以外的开发人员也将非常有用-崩溃时,它们包含程序的完整状态;如果要提交错误报告,请附加错误报告,在某些情况下还应附加应用程序二进制文件。请注意,崩溃时,您的个人数据(如帐号,密码等)很少会保留在程序的内存中。在许多情况下,仅报告崩溃的线程的回溯对开发人员发现问题有很大帮助。要获取回溯,您可以使用调试器(如gdb executable corefile)加载核心文件。


根据Microsoft的对话框,您应该仅在问题仍然存在的情况下与供应商联系,否则不要打扰。罕见的崩溃不是真正的错误,只是可重现的错误。
哈兹2014年

4
我的观察是,与UNIX软件相比,Microsoft软件的质量在很多情况下是很低的,这很好,在UNIX世界中,人们通常不参考其准则。
gena2x 2014年
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.