加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – ADDR2LINE报告1号码的行号?

发布时间:2020-12-16 06:56:45 所属栏目:百科 来源:网络整理
导读:我在 Linux上使用ADDR2LINE并且具有以下代码,这些代码故意生成用于测试的分段错误 79 free(var1);8081 printf("Thread end...n");82 free(var1);83 } 上面的第82行是执行“双重释放”的行和导致转储的行…….但是当我在命令行上使用ADDR2LINE时,它会将导致
我在 Linux上使用ADDR2LINE并且具有以下代码,这些代码故意生成用于测试的分段错误

79 free(var1);
80
81 printf("Thread end...n");
82 free(var1);
83 }

上面的第82行是执行“双重释放”的行和导致转储的行…….但是当我在命令行上使用ADDR2LINE时,它会将导致错误的行号报告为83而不是82?

我在这里错过了什么吗? ADDR2Line是否提到NEXT线?

谢谢你

林顿

解决方法

ADDR2LINE确实给出了崩溃的行号而不是下一行.
尝试在main()附近添加此代码以获取最后地址的回溯并将它们传递给addr2line ..看看你得到了什么.

void sig_segv(int signo)
{
// Generate backtrace
void *addresses[40];
char **strings;
int c = backtrace(addresses,40);
strings = backtrace_symbols(addresses,c);
printf("backtrace returned: %dn",c); 
for (int i = 0; i < c; i++) {
    std::cout << strings[i] << std::endl;
}   
exit(1);
}

在main()里面

signal(SIGSEGV,sig_segv);

唯一正确的原因/解释是,它确实在自由功能崩溃.但是在返回值处,这意味着第82行的结束和第83行的开始.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读