首页 > 其他分享 >backtrace() 段错误定位

backtrace() 段错误定位

时间:2024-07-09 09:30:11浏览次数:13  
标签:定位 错误 int backtrace 复现 auto BUG

段错误定位

原因是昨天遇到一个BUG,复现概率很小,一直复现了一下午,后来google发现可以用execinfo.h里的backtrace函数及信号处理机制, 来让程序在发生段错误时自动打印调用堆栈。最后终于复现出来了两次,用这个函数也定位到了出错位置,是多线程下的一个同步问题。

之前遇到的BUG基本都是可复现的,用简单的打印很快就能定位到BUG位置。对于这种不可复现的BUG在开发测试的时候最好能一直带着backtrace函数,以最快的速度定位BUG。

#include <execinfo.h>
#define BACKTRACE_SIZE 256
void segv_handler(int sig)
{
    void *func[BACKTRACE_SIZE];
    int size;
    size = backtrace(func, BACKTRACE_SIZE);
    backtrace_symbols_fd(func, size, STDERR_FILENO);
    exit(1);
}

int main(void)
{
    int *p = NULL;
    signal(SIGSEGV, segv_handler);
    *p = 0xdeadbeef; //---------------------Line 29
    return 0;
}

程序开始的时候注册一下SIGSEGV信号的回调,然后编译的时候带上-g。程序运行出错的时候会以汇编的形似打印调用栈。形式一般是这样:

./auto[0x400654]
/lib64/libc.so.6(+0x35250)[0x7fbbe4283250]
./auto[0x400543] //----------------出错地址
/lib64/libc.so.6(__libc_start_main+0xf5)[0x7fbbe426fb35]
./auto[0x40057e]

前边两行是SIGSEGV信号被触发的回调,第三行是段错误的位置。addr2line -e auto 0x400543可以打印出这个地址对应的代码位置。或者也可以用objdump -d xxx打印出来汇编然后去搜索这个地址。
参考:https://www.cnblogs.com/lchzd8/p/15845824.html

标签:定位,错误,int,backtrace,复现,auto,BUG
From: https://www.cnblogs.com/hellozhangjz/p/18291117

相关文章

  • CSS四种定位介绍——相对定位、绝对定位、固定定位、粘性定位
    一、相对定位  1. 如何设置相对定位?   (1)给元素设置position:relative即可实现相对定位。   (2)可以使用left、right、top、bottom四个属性调整位置。  2. 相对定位的参考点?    相对自己原来的位置  3. 相对定位的特点:  ......
  • cpp查错误
    使用Windows事件查看器调试崩溃 https://www.cnblogs.com/yilang/p/11993912.html1、  2、生成.map看函数地址 3、map里找不到0xc00004094、搜异常代码0xc0000409 5、堆栈设置    ......
  • 4个方法帮助你解决RAR解压文件时提示密码错误问题
    在日常工作和学习中,我们经常需要处理各种压缩文件,这些文件有时为了保护内容安全,会被设置密码。然而,在解压这些文件时,如果遇到“密码错误”的提示,可能会让人感到十分棘手。今天,我们就来探讨四种方法,帮助你轻松解决这一问题。方法一:确认密码的正确性首先,也是最基础的一步,就是......
  • 浮动和定位
    4.1标准文档流快级元素:独占一行h1~h6pdiv列表行内元素spanaimgstrong行内元素可以被包含在快级元素中,反之则不行4.2display <style>    /*   block块级元素   inline行内元素   inline-block是块元素但是可以内联,在一行 ......
  • 记录npm、node等的相关错误(!!!)
    报错情况当我在试着运行奇文网盘项目的时候,文档中推荐使用node版本为12.13.1,此时我使用的是nvm,所以当即就快速的切换node版本,想要去运行它。npmi还是一如既往地报错,所以我还是一如既往地采用cnpmi来下载包(经验之谈,由于想去后端发展,所以就没关心过前端的东西)。下载好之后,飞快的......
  • 计算机的错误计算(二十四)
    摘要 计算机的错误计算(二十一)就案例  展示了“两个不相等数相减,差为0”。本节给出新的计算过程:不停增加计算精度直到出现非0结果。这个过程与结果表明,即使是专业数学软件,对这个问题的处理,也不尽完美。    对于  来说,正如计算机的错误计算(二十一)所述,双精度下,其输......
  • 【DevOps】运维过程中经常遇到的Http错误码问题分析(一)
    一、解决HTTP408错误:上传3M文件时请求超时的问题在开发Web应用程序时,遇到HTTP408状态码(请求超时)是常见的问题。特别是在上传大文件时,这种情况更容易发生。本文将探讨在上传一个3M文件时,Web服务器返回408错误的原因,并提供详细的解决方案。1.理解HTTP408状态码HTTP408状......
  • 制作mdx字典时的常见错误
    首先确保data.txt的换行字符(NewlineCharacter)是CR+TF(Windows)Encoding是UTF-8 withoutSignature如果不按这个标准来,很容易出现词条数目对不上。 下面正式进行troubleshooting: Beginingloadingsourcefile...Contentislongerthen8388608atposition:0ofthe......
  • CSS【详解】定位 position (静态定位 static -- 文档流排布 、相对定位 relative、绝对
    静态定位position:static【默认】此时,元素按文档流的方式排布:以左上角为起点内联元素从左到右依次排布,当一行排不下时,自动换到下一行继续从左到右排布块级元素独占一行此时,top、left、right、bottom、z-index等样式无效。相对定位position:relative相对......
  • maven mvn install 报错: unable to find valid certification path to requested targ
    [INFO]---maven-surefire-plugin:2.22.2:test(default-test)@platform---[INFO]Downloadingfromalimaven:http://maven.aliyun.com/repository/public/org/apache/maven/surefire/maven-surefire-common/2.22.2/maven-surefire-common-2.22.2.pom[INFO]---------......