`
isiqi
  • 浏览: 16483566 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

关于SIGSEGV错误及处理方法

阅读更多

关于SIGSEGV错误及处理方法
今天编程遇到了 SIGSEGV错误,比较困惑,所以找了些资料,总结一下: (1)官方说法是: SIGSEGV --- Segment Fault. The possible cases of your encountering this error are: 1.buffer overflow --- usually caused by a pointer reference out of range. 2.stack overflow --- please keep in mind that the default stack size is 8192K. 3.illegal file access --- file operations are forbidden on our judge system. (2)SIGBUS与SIGSEGV信号的一般区别如下:1) SIGBUS(Bus error)意味着指针所对应的地址是有效地址,但总线不能正常使用该指针。通常是未对齐的数据访问所致。2) SIGSEGV(Segment fault)意味着指针所对应的地址是无效地址,没有物理内存对应该地址。 (3)Linux的mmap(2)手册页----------------------------------------------------- ---------------------使用映射可能涉及到如下 信号SIGSEGV 试图对只读映射区域进行写操作 SIGBUS 试图访问一块无文件内容对应的内存区域,比如超过文件尾的内存区域,或者以前有文件内容对应,现在为另一进程截断过的内存区域。------------ -------------------------------------------------------------- 弄清楚错误以后,就要查找产生错误的根源,一般我用以下两种方法: (1)gcc -g 编译 ulimit -c 20000 之后运行程序,等core dump 最后gdb -c core <exec file=""> 来查调用栈(2)使用strace execfile,运行程序,出错时会显示那个系统调用错<br><br></exec>
今天编程遇到了SIGSEGV错误,比较困惑,所以找了些资料,总结一下:

(1)官方说法是:
SIGSEGV --- Segment Fault. The possible cases of your encountering this error are:
1.buffer overflow --- usually caused by a pointer reference out of range.
2.stack overflow --- please keep in mind that the default stack size is 8192K.
3.illegal file access --- file operations are forbidden on our judge system.


(2)SIGBUS与SIGSEGV信号的一般区别如下:
1) SIGBUS(Bus error)意味着指针所对应的地址是有效地址,但总线不能正常使用该指针。通常是未对齐的数据访问所致。
2) SIGSEGV(Segment fault)意味着指针所对应的地址是无效地址,没有物理内存对应该地址。


(3)Linux的mmap(2)手册页
--------------------------------------------------------------------------
使用映射可能涉及到如下信号
SIGSEGV
试图对只读映射区域进行写操作
SIGBUS
试图访问一块无文件内容对应的内存区域,比如超过文件尾的内存区域,或者以前有文件内容对应,现在为另一进程截断过的内存区域。
--------------------------------------------------------------------------

弄清楚错误以后,就要查找产生错误的根源,一般我用以下两种方法:
(1)gcc-g编译
ulimit-c20000
之后运行程序,等coredump
最后gdb-ccore<execfile>

来查调用栈
(2)使用straceexecfile,运行程序,出错时会显示那个系统调用错
分享到:
评论

相关推荐

    linux下段错误检查sigsegv

    在`sigsegv.c`中,这些函数会被实现并调用来增强错误处理能力。 4. 常见段错误原因: - NULL指针解引用:当指针未初始化或已被设为NULL时,尝试通过它访问内存会导致段错误。 - 越界数组访问:如果索引超出数组...

    Obtaining a stack trace in C upon SIGSEGV

    此方法尤其适用于那些希望在程序崩溃时能够追踪到错误发生位置的情况。 #### 如何工作? ##### 信号处理 当程序遇到一个无法处理的信号时,如 `SIGSEGV`(通常由非法内存访问引发),操作系统会向该进程发送信号...

    段错误总结

    用户态程序可以通过捕获 SIGSEGV 信号来处理段错误。 SIGSEGV 的定义 SIGSEGV 是一种信号,它表示内存访问错误。它可以发生在程序尝试访问不允许访问的内存区域时,或者以错误的类型访问内存区域时。 SIGSEGV 的...

    段错误的定义及常用的调试方法

    ### 段错误的定义及常用的调试方法 在计算机编程领域,**段错误**(Segmentation fault)是一种常见的运行时错误,通常由程序试图访问它无权访问的内存区域所引发。这种错误在多种编程语言中都可能出现,尤其是在C...

    Linux下的段错误产生的原因及调试方法

    ### Linux下的段错误产生的原因及调试方法 #### 概述 段错误,即`Segmentation fault`,是在程序运行过程中由于非法访问内存所引发的一种错误。这种错误在Linux环境下非常常见,尤其对于使用C/C++这类需要手动管理...

    MPI中可能会出现的错误收藏.doc

    SIGSEGV 错误是一种常见的错误,可能是由于段错误或数组越界引起的。在 MPI 编程中,如果只在一个进程中给指针申请空间,而在其他进程没有申请,可能会导致 SIGSEGV 错误。在解决这个错误时,需要检查程序中是否存在...

    Linux C段错误定位

    为了解决这类问题,开发者需要能够有效地定位错误发生的点,以便修复代码。本文将探讨如何在Linux环境下,通过信号处理和调试技巧来定位C段错误。 首先,我们需要理解什么是SIGSEGV信号。当进程尝试访问其没有权限...

    Linux环境下段错误(Segmentation fault)的产生原因及调试方法

    当程序出现段错误时,系统通常不会提供太多关于错误发生位置的信息。为了获取更详细的调试信息,我们可以采用以下方法: 3.1 使用`dmesg`命令: 在程序崩溃后,`dmesg`可以显示内核缓冲区中保存的最近的系统消息,...

    进程错误处理机制

    在"chapter6"这个文件中,可能包含了关于进程错误处理机制的更深入讲解,比如第六章可能详细讨论了错误处理的实现细节、特定类型的错误和它们的处理方法,或者是介绍了使用特定工具进行故障排查的步骤。为了获取更...

    linux段错误调试方法.pdf

    Linux 段错误调试方法 Linux 段错误是指访问了错误的内存段,一般是...段错误是 Linux 中最常见的错误之一,解决方法是使用 GDB 或 Valgrind 等工具来查找段错误的位置,并对代码进行修改和优化,以避免段错误的发生。

    C语言段错误 总结 段错误整理

    四、如何发现程序中的段错误并处理掉? 要发现程序中的段错误,需要使用调试工具或日志记录来追踪程序的执行过程。常用的调试工具包括 GDB、Valgrind 等。 一旦发现段错误,需要找到错误的原因并进行修复。常用的...

    linux c段错误处理

    ### Linux C段错误处理 #### 1. 什么是“Segmentation fault in Linux”? 段错误(Segmentation fault),通常简称为SIGSEGV,是计算机软件运行过程中的一种特定错误条件。当一个程序尝试访问其无权访问的内存...

    Linux下的段错误产生的原因及调试方法.pdf

    ### Linux下的段错误产生的原因及调试方法 #### 一、段错误的概念与产生原因 **段错误**(Segmentation Fault)是一种常见的程序错误,当一个程序试图访问非法内存区域时,操作系统为了保护内存的安全性,会中断该...

    c语言段错误及调试总结.pdf

    通过上述方法,程序员可以更有效地找出和解决段错误,提高代码质量和程序稳定性。在C语言编程中,理解和预防段错误是至关重要的,因为它们直接关系到程序的正确性和可靠性。不断学习和实践,结合有效的调试技术,将...

    Segmentation Fault错误原因总结 _ Sissy 婷婷 Blog1

    调试SIGSEGV错误通常涉及使用调试工具,如GDB(GNU调试器)。通过设置断点、检查堆栈回溯和查看内存状态,可以定位到触发错误的具体代码行。此外,`valgrind`工具可以检测内存错误,包括未初始化的内存、内存泄漏和...

    在不具备gdb环境的Linux系统上大致定位段错误位置

    当出现段错误时,Linux系统会向进程发送`SIGSEGV`信号,如果该信号没有被正确处理,则会导致进程终止,并显示“segmentation fault”错误消息。 #### 2. SIGSEGV信号处理函数 默认情况下,当程序接收到`SIGSEGV`...

    段错误(linux)

    #### 解决段错误的方法 针对段错误,可以通过以下几种方式来诊断和解决问题: 1. **使用调试工具**:GDB是Linux下非常强大的调试工具,可以帮助开发者逐步执行程序,检查变量值和内存状态。 - 命令示例:`gdb ./...

    c语言段错误及调试总结.docx

    程序员可以通过捕获这些信号或异常来处理错误,或者利用这些信息进行调试,找出引发段错误的原因。 总的来说,理解并避免段错误是C语言编程中至关重要的技能。通过细心的编程习惯和有效的调试手段,可以减少段错误...

Global site tag (gtag.js) - Google Analytics