草庐IT

segmentation-fault

全部标签

c - 为什么取消引用 (char*)0 的 Linux 程序并不总是出现段错误?

我正在测试旨在检测子进程何时发生段错误的代码。想象一下,当这段代码并不总是出现段错误时我感到很惊讶:#includeintmain(){char*p=(char*)(unsignedlong)0;putchar(*p);return0;}我在DebianLinux2.6.26内核下运行;我的shell是来自Debianksh包的AT&Tksh93,版本M93s+2008-01-31。有时这个程序会出现段错误,但在其他情况下,它只会以非零退出状态静默终止,但没有任何消息。我的信号检测程序报告如下:segfaultterminatedbysignal11:Segmentationfault

c++ - 调试讨厌的 SIGILL 崩溃 : Text Segment corruption

我们的是基于PowerPC的嵌入式系统,运行Linux。我们遇到了一个随机的SIGILL崩溃,这种崩溃在各种应用程序中都会出现。崩溃的根本原因是要执行的指令归零。这表明驻留在内存中的文本段已损坏。由于文本段以只读方式加载,因此应用程序无法破坏它。所以我怀疑是某些常见的子系统(DMA?)导致了这种损坏。由于问题需要几天时间才能重现(由于SIGILL而导致崩溃),因此调查变得越来越困难。因此,首先我想知道任何应用程序的文本段是否以及何时已损坏。我查看了堆栈跟踪和所有指针、寄存器都是正确的。你们有什么建议吗?一些信息:Linux3.12.19-rt30#1SMPFriMar1101:31:2

c++ - 调试讨厌的 SIGILL 崩溃 : Text Segment corruption

我们的是基于PowerPC的嵌入式系统,运行Linux。我们遇到了一个随机的SIGILL崩溃,这种崩溃在各种应用程序中都会出现。崩溃的根本原因是要执行的指令归零。这表明驻留在内存中的文本段已损坏。由于文本段以只读方式加载,因此应用程序无法破坏它。所以我怀疑是某些常见的子系统(DMA?)导致了这种损坏。由于问题需要几天时间才能重现(由于SIGILL而导致崩溃),因此调查变得越来越困难。因此,首先我想知道任何应用程序的文本段是否以及何时已损坏。我查看了堆栈跟踪和所有指针、寄存器都是正确的。你们有什么建议吗?一些信息:Linux3.12.19-rt30#1SMPFriMar1101:31:2

linux - 在 Unix 系统上自动获取堆栈跟踪

在Unix系统上有哪些自动获取堆栈跟踪的方法?我的意思不是仅仅获取核心文件或与GDB交互附加,而是拥有一个SIGSEGV处理程序将回溯转储到文本文件。以下可选功能的奖励积分:在崩溃时收集额外信息(例如配置文件)。通过电子邮件将崩溃信息包发送给开发人员。能够将其添加到dlopened共享库中不需要GUI 最佳答案 仅供引用,建议的解决方案(在信号处理程序中使用backtrace_symbols)有被破坏的危险。不要使用它-是的,backtrace和backtrace_symbols会生成回溯并将其转换为符号名称,但是:backtrac

linux - 在 Unix 系统上自动获取堆栈跟踪

在Unix系统上有哪些自动获取堆栈跟踪的方法?我的意思不是仅仅获取核心文件或与GDB交互附加,而是拥有一个SIGSEGV处理程序将回溯转储到文本文件。以下可选功能的奖励积分:在崩溃时收集额外信息(例如配置文件)。通过电子邮件将崩溃信息包发送给开发人员。能够将其添加到dlopened共享库中不需要GUI 最佳答案 仅供引用,建议的解决方案(在信号处理程序中使用backtrace_symbols)有被破坏的危险。不要使用它-是的,backtrace和backtrace_symbols会生成回溯并将其转换为符号名称,但是:backtrac

Linux:如何调试 SIGSEGV?如何追溯错误来源?

我的firefox从今天开始就崩溃了。我没有对系统或Firefox配置进行任何更改。我用strace-ff-odumpfile.txtfirefox追踪问题。帮助不大。我在两个生成的进程转储中看到段错误,但是我如何才能追踪他们的原因呢?运行10秒后崩溃,strace生成了22MB的数据。这是输出的一个片段,您可以在中间看到实际的SIGSEGV。:read(19,"\372",1)=1gettimeofday({1245590019,542231},NULL)=0read(3,"\6\0[Qmy\26\0\3\1\0\0Y\0\200\2\0\0\0\0\323\3A\0\323\3(\

Linux:如何调试 SIGSEGV?如何追溯错误来源?

我的firefox从今天开始就崩溃了。我没有对系统或Firefox配置进行任何更改。我用strace-ff-odumpfile.txtfirefox追踪问题。帮助不大。我在两个生成的进程转储中看到段错误,但是我如何才能追踪他们的原因呢?运行10秒后崩溃,strace生成了22MB的数据。这是输出的一个片段,您可以在中间看到实际的SIGSEGV。:read(19,"\372",1)=1gettimeofday({1245590019,542231},NULL)=0read(3,"\6\0[Qmy\26\0\3\1\0\0Y\0\200\2\0\0\0\0\323\3A\0\323\3(\

c - 由于 C 中内存不足导致的段错误

此代码在大约1/2的时间内给出了段错误:intmain(intargc,char**argv){floattest[2619560];inti;for(i=0;i我实际上需要分配一个更大的数组,是否有某种方法可以让操作系统允许我获得更多内存?我正在使用LinuxUbuntu9.10 最佳答案 您溢出了默认的最大堆栈大小,即8MB。您可以增加堆栈大小-例如。对于32MB:ulimit-s32767...或者您可以切换到使用malloc进行分配:float*test=malloc(2619560*sizeoftest[0]);

c - 由于 C 中内存不足导致的段错误

此代码在大约1/2的时间内给出了段错误:intmain(intargc,char**argv){floattest[2619560];inti;for(i=0;i我实际上需要分配一个更大的数组,是否有某种方法可以让操作系统允许我获得更多内存?我正在使用LinuxUbuntu9.10 最佳答案 您溢出了默认的最大堆栈大小,即8MB。您可以增加堆栈大小-例如。对于32MB:ulimit-s32767...或者您可以切换到使用malloc进行分配:float*test=malloc(2619560*sizeoftest[0]);

c - time() 和 gettimeofday() 之间的区别以及为什么会导致段错误

我正在尝试测量系统调用的时间量,我尝试在该程序中使用time(0)和gettimeofday(),但是每当我使用gettimeofday()来分割错误。我想我可以只使用time(0)但我想知道为什么会这样。我知道你们可以看看它,看看问题所在。请不要对我大喊大叫!我想得到时间但不想把它保存在任何地方。我已经尝试了所有我能想到的代码组合,但我在这里粘贴了最简单的版本。我是C和Linux的新手。我查看了.stackdump文件,但它对我来说毫无意义。GetRDTSC在util.h中,它执行rdtsc(),正如人们所期望的那样。现在它设置为10次迭代,但稍后循环将运行1000次,没有print