注册 登录
LUPA开源社区 返回首页

liuanggh的个人空间 http://www.lupaworld.com/?24161 [收藏] [复制] [分享] [RSS]

我的博客

如何利用gdb解决程序crash的问题

已有 1347 次阅读2013-11-5 17:08 |个人分类:嵌入式|系统分类:IT技术| 程序, 如何

1. 修改Makefile, 增加-g的编译选项, 重新编译程序,并重现死机的问题。

死机的打印信息如下:

do_page_fault() #2: sending SIGSEGV to voip_task for invalid read access from
0000004c (epc == 00472898, ra == 00472880)

Cpu 0
$ 0   : 00000000 1000fc01 00000000 009699a8
$ 4   : 00000001 007f0000 007e9bd0 0000006b
$ 8   : 00000000 9538df1c 00000000 fffffff8
$12   : ffffffff 00000000 00000003 2b09a03c
$16   : 00000000 00000000 00000000 00000000
$20   : 007f0000 7f601000 2ab3c648 ffc00000
$24   : 00000000 00590ee4                  
$28   : 0095f880 7f7ff7b8 00000002 00472880
Hi    : ffffff32
Lo    : 7f96021a
epc   : 00472898     Tainted: PF    
ra    : 00472880 Status: 0000fc13    USER EXL IE 
Cause : 30800008
BadVA : 0000004c
PrId  : 00018448
Process voip_task (pid: 538, threadinfo=9538c000, task=955227c0)
The signr is 11
Stack : 00000000 00000000 007ec96c 00000749 00000000 00000000 00000000 00000000
        0095f880 00000000 00000000 00000000 00000000 00000000 00000000 00000000
        7f7ffe20 00000000 0000000f 00000000 7f7ff880 00465a24 00000000 00000000
        00000000 00000000 0095f880 00000000 7f7ffe20 2aaf9768 00000000 00000000
        00000000 00000000 2ab48a20 00000000 7f7ffb68 7f7ffb68 00000402 00000000
        ...
Call Trace:

Code: afb30018  8f858028  00408021 <8c42004c> 8f99e328  00002021  afa2001c  24a5c558  2686c96c 

从串口的打印信息的epc地址可以看出, 程序死机在0x472898

2. 使用gdb查看crash的发生在哪个地方。
/opt/ipp_toolchain/mipsel-uclibc-toolchain/bin/mipsel-linux-uclibc-gdb ./build/obj/apps/voip_task/voip_task
进入gdb后, 使用命令 l *0x472898, 查看死机的地方。

GNU gdb 6.4
Copyright 2005 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "--host=i386-pc-linux-gnu --target=mipsel-linux-uclibc"...
(gdb) l *0x472898
0x472898 is in dsp_play (src/common/acl_dsp_telephony_commands.c:1877).

1877        DBG_PRINT(">> n=%d,signal=%d,start=%d earlyRtpCreated=%d\r\n",n,s,start, pLine->earlyRtpCreated);
1878
1879            if(pLine->earlyRtpCreated==EARLY_MEDIA_SET && start==0) return;
1880            /* AlexChen : VI93353 do not play ringback tone if we are alredy playing earlyMedia */
1881            /* AlexChen : VI93422 Don't hear a dial tone when performing second call return only on VOIP_SIGNAL_RING_TONE */
(gdb) 
程序死在 in dsp_play (src/common/acl_dsp_telephony_commands.c:1877),接下来就解决掉这个问题了。

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册
验证问答 换一个 验证码 换一个

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部