ADDR2LINE报告1号码的行号?

时间:2011-06-18 08:37:58

标签: c

我在Linux上使用ADDR2LINE并且具有以下代码,这些代码专门用于测试

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

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

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

感谢你好

林顿

1 个答案:

答案 0 :(得分:1)

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: %d\n", c); 
for (int i = 0; i < c; i++) {
    std::cout << strings[i] << std::endl;
}   
exit(1);
}

在main()

signal(SIGSEGV, sig_segv);

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