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行的开始. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |