Answers:
甲段故障是存储器访问冲突的结果。该程序已在分配给它的内容之外引用了一个内存地址,并且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
可能有用,或者手册页可能指示如何获得此版本),
希望不久后有人会回复您。提交错误通常令人赞赏。
gdb
做很多事情。您想单击以了解第5.1节
这意味着该应用程序存在错误。
如果您是最终用户,则应与应用程序供应商联系。
如果是您自己的应用程序,则可以:
$ ulimit -c unlimited
$ ./yourapp
$ gdb ./yourapp core
核心文件对您以外的开发人员也将非常有用-崩溃时,它们包含程序的完整状态;如果要提交错误报告,请附加错误报告,在某些情况下还应附加应用程序二进制文件。请注意,崩溃时,您的个人数据(如帐号,密码等)很少会保留在程序的内存中。在许多情况下,仅报告崩溃的线程的回溯对开发人员发现问题有很大帮助。要获取回溯,您可以使用调试器(如gdb executable corefile
)加载核心文件。