Symbian S60开发,在真机上显示panic异常信息。

在用Symbian C++做S60应用开发过程中,使用模拟器运行时,如果程序出现panic或者memory leak,系统会弹出对话框,提示异常类型以及相关参数。

程序在真机上运行时,因为考虑到手机用户的感受,不会显示这些异常提示。而针对开发一些只能在真机上进行测试的应用(如与摄像头相关的视频capture)时,这种异常调试信息是非常有用的。那么能否在真机上也显示异常调试信息呢?

答案是肯定的。具体实现方法:

原理:如果手机上存在文件 c:/resource/ErrRd 文件(注意这个文件没有扩展名),则程序运行时如果有异常,系统会弹出提示对话框。

实现:将ErrRd文件放入c:/resource目录,好像挺简单哦。表高兴太早,还有点小麻烦。我用蓝牙链接,根本看不到c:/resource目录,即使在手机上安装file browser,也不能在这个目录下创建、删除文件,因为这个目录是private的,不能随便访问。

采用一个变通方式,sis安装包在作deployment时,是可以向c:/resource下写入文件的,利用这种方式,随便找个可以生成sis包的程序,修改一下pkg文件,添加一个安装部署文件,如:

; something.pkg

; ...

;Files to install

"ErrRd"                 -"!:/resource/ErrRd"

...


这样生成sis并签名,然后安装到手机上,ErrRd就被复制到c:/resource下了,再搞个有panic或者内存泄漏的程序运行试试,果然有提示信息出现,cool!

在N80(S60 3rd)手机上测试OK.
Kernel panic 是指 Linux 内核遇到了无法继续执行的致命错误,此时会在屏幕上输出一些错误信息,其中就包括堆栈信息。堆栈信息是指发生错误时 CPU 执行的代码路径,可以通过堆栈信息来定位错误发生的位置。 通常,堆栈信息会以类似下面的形式输出: ``` Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b CPU: 0 PID: 1 Comm: init Not tainted 4.4.0-31-generic #50-Ubuntu Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Ubuntu-1.8.2-1ubuntu1 04/01/2014 ffffffff813f7ab7 ffff8800363c7e00 ffffffff817e0c5d 0000000000000000 ffff8800363c7e38 ffff8800363c7e20 ffffffff8108124c ffff8800363c7e58 ffffffff810812a2 ffffffff81862f78 ffffffff81862f68 ffffffff81862f68 Call Trace: [<ffffffff813f7ab7>] dump_stack+0x63/0x82 [<ffffffff817e0c5d>] panic+0xc8/0x1fe [<ffffffff8108124c>] do_exit+0x6d4/0x6e0 [<ffffffff810812a2>] do_group_exit+0x42/0xa0 [<ffffffff8108a300>] get_signal+0x2f8/0x5c0 [<ffffffff81015eb5>] do_signal+0x55/0x6d0 [<ffffffff8108f9cc>] ? __fget_light+0x3c/0x50 [<ffffffff81011c2b>] do_notify_resume+0x9b/0xc0 [<ffffffff817fba0c>] int_signal+0x12/0x17 ``` 堆栈信息的最后一行是 `Call Trace:`,接下来的几行是函数调用栈,每一行都是一个函数调用,最上面的是发生错误的函数,最下面的是最开始的函数。 在上面的例子中,发生错误的函数是 `panic+0xc8/0x1fe`,它是由函数 `do_exit+0x6d4/0x6e0` 调用的,而 `do_exit` 又是由函数 `do_group_exit+0x42/0xa0` 调用的,以此类推,直到最下面的 `int_signal+0x12/0x17`,它是被中断处理程序调用的。 通过分析堆栈信息,可以找到发生错误的函数及其调用关系,从而定位错误原因。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值