• 将信号用作 Linux 调试工具 From IBMDW


    本文介绍了如何用信号来调试一个程序。众所周知,在Linux编程中,经常会遇到程序segment fault或其他类似的错误,这些错误比较难调试,本文就介绍了用信号来调试这种错误的方法。

    当一个程序访问一个未分配内存的地址时或其他情况时,会产生segment fault错误,此时程序会产生一个SIGSEGV的信号,所以,我们的程序可以捕获这个信号,并打印出是哪条指令导致了该错误,及产生该错误时CPU各寄存器的值,从而定位出问题所在。

    本文举了两个很好的例子,一个是对SIGILL信号的处理,比如,当一个应用程序执行了一个不被允许的操作(比如用汇编执行保存/恢复CPU特权 寄存器的指令),这种操作在用户空间中是不被允许的,只有内核程序采用使用这种指令,那么,此时,程序就会产生一个SIGILL的信号,我们的程序可以捕 获这个信号,同时将产生该信号的指令和当前CPU寄存器的值打印到一个文件中,然后退出。OK,有了这些信息后,我们就可以用objdump来查看我们的 二进制程序文件,找到相应的指令,然后就可以分析出是程序的哪句代码导致了该错误了,赞啊!

    如果我们在编译程序的时候,加上了 -g 这个选项,那么,在objdump的输出中,还会在相应的汇编代码处加上源代码,这就更方便我们定位代码错误了!

    本文第二个例子就是给一个未分配内存空间的指针赋值,显然,这会产生SIGSEGV信号,同样的,我们捕获这个信号,并将指令和CPU寄存器的值打印出来,然后用objdump分析二进制文件,就可以找到是哪句代码导致了该错误了!
  • 相关阅读:
    Python基础编程常用模块汇总
    博客目录
    网络编程
    python 对象
    python模块和规范开发
    python常用内置函数
    python递归函数和匿名函数
    python装饰器
    python迭代器,生成器,推导式
    python作用域
  • 原文地址:https://www.cnblogs.com/super119/p/2005602.html
Copyright © 2020-2023  润新知