博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
安卓C++代码crash时获取栈信息
阅读量:5370 次
发布时间:2019-06-15

本文共 995 字,大约阅读时间需要 3 分钟。

上篇提到因为全局对象没有初始化造成的windows上不crash但是安卓上会crash的问题其实就是个很简单的空指针问题。但是因为对安卓代码不熟悉,前后折腾了一个星期才发现。

 

最开始的时候安卓手机是需要装个似乎叫GDB的工具才能调试的,但是据说很不好用,我没用过,然后其他同事能用的也很少。

 

后来听说4.0以上的手机可以连eclipse调试了,喜大普奔的借了一台来,结果发现eclipse的adt版本太低,右键不出现debug as Android Application这个选项,于是升级。这类东西的升级向来都是噩梦,各种需要配套,而且速度经常还很慢,于是反复装反复升级,算是好了。

 

中间还出来一个问题,跑的时候会报一个很奇怪的错,细节忘了,搜索之发现是要把一个什么东西加到eclipse的启动项目里。

 

期间还有各种诡异问题,反正折腾了好久最后终于是能跑了,然后借不到能用的4.0的手机,之前那台不知道为啥说空间不够死活不让我装啊,同事出了个馊主意用91助手可以装到sd卡上,可是没用啊,如果要调试的话,人家还是会自己重新装。

 

最后的最后,收到上述同事发来的邮件,终于解决问题。

 

这个crash不好查的原因是因为并不会跟windows跑一样给你弹个框说空指针了,连xcode都不如,看log感觉他就默默的死掉了。不过有个线索是log里面会有一个像栈一样的信息,不过这个信息很低调,只能说感觉像栈,其实全是数字。但是呢,这个数字可以用ndk自带的工具addr2line还原出具体函数行号——这就够够的了啊。

 

Ndk目录/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-addr2line.exe -f -e XXX.so 0xXXXXXXXX

 

就可以了。中间的版本什么的要和编译so的版本匹配,具体信息在eclipse里面是能看到的。结果我刚用的时候出来是??:??,请教之发现是因为我用的so不对,当时搜出来两个,应该用local下面那个,跟其他东西在一起的。然后当当当当就看到栈了,马上就定位好了问题。

 

那个目录还有很多其他的工具,感觉也很有用,不过就没有深入发掘了。

 

转载于:https://www.cnblogs.com/unionfind/p/3417612.html

你可能感兴趣的文章
在Flex中用Validator检测数字、字符串、Email.
查看>>
[leetcode]4Sum
查看>>
POJ1062 昂贵的聘礼
查看>>
【零基础学习iOS开发】【02-C语言】08-基本运算
查看>>
Java 将指定字符串连接到此字符串的结尾 concat()
查看>>
Hibernate Criterion
查看>>
Python知识
查看>>
我们为什么要搞长沙.NET技术社区(三)
查看>>
杭电acm Cake
查看>>
js函数中this的指向
查看>>
c++ 引用方式传递数组
查看>>
HBase学习之路 (九)HBase phoenix的使用
查看>>
LeetCode() Remove Duplicates from Sorted Array II
查看>>
【svn】idea svn 文件上会出现一个破书
查看>>
cocos2d-x 3.0 场景切换特效汇总(转)
查看>>
The SortedMap Interface
查看>>
SniperOJ-leak-x86-64
查看>>
bzoj 4260: Codechef REBXOR (01 Trie)
查看>>
学好python
查看>>
css-IE中的border-radius和box-shadow
查看>>