如何在NDK环境下捕获异常?

nut799 2013-03-25 10:03:08
最近在使用C++在NDK环境下开发,发现无法使用try catch捕获异常,请问NDK环境下如何捕获异常?


想在程序crash的时候,做个dump文件.方便大规模测试.
...全文
489 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
nut799 2013-04-01
  • 打赏
  • 举报
回复
我在native层注册信号处理函数,然后在crash 发生的时候 ,通知java层 启动了一个activity,用这个activity去logcat收集 crash信息。再输出到sd卡里面。都ok. 但是有一个奇怪的问题。 logcat 的log里面 没有 内存的信息 。 类似这些 04-24 05:37:00.476: I/DEBUG(58): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00001a85 04-24 05:37:00.476: I/DEBUG(58): r0 f6502688 r1 00000000 r2 f6502688 r3 00001a85 04-24 05:37:00.476: I/DEBUG(58): r4 00003000 r5 00000000 r6 00000039 r7 00000000 04-24 05:37:00.558: I/DEBUG(58): #00 pc 50408a56 /data/data/tiny.test2/lib/libcaneth.so 04-24 05:37:00.558: I/DEBUG(58): #01 lr 没有这些的话,我没有办法定位具体crash的地址 。。 是不是还要设些别的? 谢谢!
nut799 2013-03-27
  • 打赏
  • 举报
回复
我试试看 ,恩 ,呵呵,请问有这方面的资料网站不?
louyong0571 2013-03-26
  • 打赏
  • 举报
回复
貌似不太容易实现,可以试试在ndk层catch信号,收到信号的时候去logcat里拿log吧。
louyong0571 2013-03-26
  • 打赏
  • 举报
回复
我的意思是在c代码里注册信号处理函数,指针操作的问题不是都signal 11 什么的吗。 个人想法,仅供参考,呵呵。
nut799 2013-03-26
  • 打赏
  • 举报
回复
ndk层catch信号,可以具体点吗? 因为不是在调试环境做crash dump.是想做apk出来运行,获取dump文件,存起来.
nut799 2013-03-26
  • 打赏
  • 举报
回复
上面类似的代码, renderFrame里面我估计写几个错误的指针操作. 不会进入catch块.程序直接就崩掉了.
nut799 2013-03-26
  • 打赏
  • 举报
回复
引用 1 楼 louyong0571 的回复:
貌似不太容易实现,可以试试在ndk层catch信号,收到信号的时候去logcat里拿log吧。
可以具体点吗? 我这边类似
try
	{
		renderFrame();
	}

	catch (const std::exception& e)
	{
		__android_log_print( ANDROID_LOG_INFO, "debug", "catch catch catch catch catch\n" );
		jclass jc = env->FindClass("java/lang/Error");
		if(jc) env->ThrowNew (jc, "unidentified exception");
	}
	catch (...)
	{
		__android_log_print( ANDROID_LOG_INFO, "debug", "catch catch catch catch catch\n" );
	    jclass jc = env->FindClass("java/lang/Error");
	    if(jc) env->ThrowNew (jc, "unidentified exception");
	}

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧