- 论坛徽章:
- 0
|
环境:suse 10 ia-64
glibc rpm版本:2.4-31.30
测试代码
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <stdio.h>
#include <math.h>
#include <alloca.h>
int cmp_func(const void *a, const void *b);
int main()
{
size_t len = 155;
size_t width = 4;
int array[155];
int i = 0;
int *p;
p=NULL;
for (i=0;i<len;i++)
{
array=fabs(rand()*10000/100);
}
qsort(array, len, width,cmp_func);
//for (i=0;i<len;i++)
//{
// printf("array[%d]=%d\n",i, array);
//}
// get core
printf("memory fault %d\n", *p);
return 0;
}
int cmp_func(const void *a, const void *b)
{
return (*(int *)a)-(*(int *)b);
}
用gdb设断点,step不到qsort函数里面。
用strace里面也看不到qsort里面调用的msort_with_tmp和memcpy
我想看到这样的堆栈调用(以下是oracle数据库内部错误的函数调用堆栈)
__GI_memcpy()+496 ???? 0xA000000000010720
msort_with_tmp()+75 ???? __GI_memcpy() 607FFFFFFF314AF0 ?
2 607FFFFFFF314AE0 ?
607FFFFFFF314AD0 ?
C000000000002DE0 ?
4000000009B781D0 ?
msort_with_tmp()+12 ???? msort_with_tmp() 200000000200F5C4 ?
8 000000005 ? 000000004 ?
400000000B0DDAE0 ?
000000002 ?
msort_with_tmp()+17 ???? msort_with_tmp() 200000000200F5C4 ?
6 00000000A ? 000000004 ?
400000000B0DDAE0 ?
60000000002BA600 ?
msort_with_tmp()+17 ???? msort_with_tmp() 200000000200F578 ?
6 000000014 ? 000000004 ?
400000000B0DDAE0 ?
60000000002BA600 ?
msort_with_tmp()+12 ???? msort_with_tmp() 200000000200F4DC ?
8 000000027 ? 000000004 ?
400000000B0DDAE0 ?
60000000002BA600 ?
msort_with_tmp()+17 ???? msort_with_tmp() 200000000200F4DC ?
6 00000004E ? 000000004 ?
400000000B0DDAE0 ?
60000000002BA600 ?
__GI_qsort()+304 ???? msort_with_tmp() 200000000200F270 ?
00000009C ? 000000004 ?
400000000B0DDAE0 ?
60000000002BA600 ? |
|