免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2512 | 回复: 0
打印 上一主题 下一主题

[C]如何跟踪glibc的qsort 中的函数调用堆栈 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-07 12:53 |只看该作者 |倒序浏览
环境: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 ?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP