我正在开发一个调用 native 代码的 Android 程序。该 native 代码存在段错误,并且由于通过 android NDK 进行调试并不是真正可行的,所以我留下了一个如下所示的调用堆栈(从 ddms 捕获)。我的问题是,我是否可以在事后手动运行某些东西,将调用堆栈中的内存地址转换为函数名称,这样我就可以看到这是哪里出现了段错误。
谢谢
02-22 14:47:39.231: DEBUG/dalvikvm(504): Trying to load lib /data/data/android.TestApp/lib/libDM.so 0x43b7c938
02-22 14:47:39.301: DEBUG/dalvikvm(504): Added shared lib /data/data/android.TestApp/lib/libDM.so 0x43b7c938
02-22 14:47:39.310: DEBUG/dalvikvm(504): No JNI_OnLoad found in /data/data/android.TestApp/lib/libDM.so 0x43b7c938
02-22 14:47:39.406: DEBUG/dalvikvm(504): +++ not scanning '/system/lib/libwebcore.so' for 'onLoadModel' (wrong CL)
02-22 14:47:39.410: DEBUG/dalvikvm(504): +++ not scanning '/system/lib/libmedia_jni.so' for 'onLoadModel' (wrong CL)
02-22 14:47:39.410: DEBUG/dalvikvm(504): +++ not scanning '/system/lib/libexif.so' for 'onLoadModel' (wrong CL)
02-22 14:47:39.410: DEBUG/dalvikvm(504): +++ not scanning '/system/lib/libsrec_jni.so' for 'onLoadModel' (wrong CL)
02-22 14:47:39.569: INFO/DEBUG(28): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
02-22 14:47:39.569: INFO/DEBUG(28): Build fingerprint: 'generic/sdk/generic/:2.1/ERD79/22607:eng/test-keys'
02-22 14:47:39.569: INFO/DEBUG(28): pid: 504, tid: 504 >>> android.TestApp <<<
02-22 14:47:39.569: INFO/DEBUG(28): signal 11 (SIGSEGV), fault addr 00000008
02-22 14:47:39.581: INFO/DEBUG(28): r0 00000000 r1 00000068 r2 00002350 r3 80facc00
02-22 14:47:39.581: INFO/DEBUG(28): r4 beb3c918 r5 000024b8 r6 fffacafc r7 0000aa98
02-22 14:47:39.581: INFO/DEBUG(28): r8 00000000 r9 000024b8 10 fffacafc fp 00000000
02-22 14:47:39.581: INFO/DEBUG(28): ip afbc30c8 sp beb3c858 lr 80dffdf3 pc 80dfb18a cpsr 40000030
02-22 14:47:39.711: INFO/DEBUG(28): #00 pc 001fb18a /data/data/android.TestApp/lib/libDM.so
02-22 14:47:39.733: INFO/DEBUG(28): #01 pc 001ffdee /data/data/android.TestApp/lib/libDM.so
02-22 14:47:39.740: INFO/DEBUG(28): #02 pc 0031cc2c /data/data/android.TestApp/lib/libDM.so
02-22 14:47:39.754: INFO/DEBUG(28): #03 pc 0031cd74 /data/data/android.TestApp/lib/libDM.so
02-22 14:47:39.761: INFO/DEBUG(28): #04 pc 0000f1f4 /system/lib/libdvm.so
02-22 14:47:39.769: INFO/DEBUG(28): #05 pc 00038018 /system/lib/libdvm.so
02-22 14:47:39.779: INFO/DEBUG(28): #06 pc 000316a2 /system/lib/libdvm.so
02-22 14:47:39.790: INFO/DEBUG(28): #07 pc 0003d31c /system/lib/libdvm.so
02-22 14:47:39.810: INFO/DEBUG(28): #08 pc 00013f58 /system/lib/libdvm.so
02-22 14:47:39.810: INFO/DEBUG(28): #09 pc 00019888 /system/lib/libdvm.so
02-22 14:47:39.820: INFO/DEBUG(28): #10 pc 00018d5c /system/lib/libdvm.so
02-22 14:47:39.846: INFO/DEBUG(28): #11 pc 0004d3bc /system/lib/libdvm.so
02-22 14:47:39.852: INFO/DEBUG(28): #12 pc 00054e74 /system/lib/libdvm.so
02-22 14:47:39.871: INFO/DEBUG(28): #13 pc 00013f58 /system/lib/libdvm.so
02-22 14:47:39.871: INFO/DEBUG(28): #14 pc 00019888 /system/lib/libdvm.so
02-22 14:47:39.889: INFO/DEBUG(28): #15 pc 00018d5c /system/lib/libdvm.so
02-22 14:47:39.889: INFO/DEBUG(28): #16 pc 0004d6d0 /system/lib/libdvm.so
02-22 14:47:39.900: INFO/DEBUG(28): #17 pc 0003a72c /system/lib/libdvm.so
02-22 14:47:39.909: INFO/DEBUG(28): #18 pc 0002be52 /system/lib/libdvm.so
02-22 14:47:39.921: INFO/DEBUG(28): #19 pc 00026cf4 /system/lib/libandroid_runtime.so
02-22 14:47:39.930: INFO/DEBUG(28): #20 pc 000279d8 /system/lib/libandroid_runtime.so
02-22 14:47:39.940: INFO/DEBUG(28): #21 pc 00008cae /system/bin/app_process
02-22 14:47:39.949: INFO/DEBUG(28): #22 pc 0000c2c6 /system/lib/libc.so
02-22 14:47:39.969: INFO/DEBUG(28): #23 pc b00018aa /system/bin/linker
02-22 14:47:39.981: INFO/DEBUG(28): code around pc:
02-22 14:47:39.981: INFO/DEBUG(28): 80dfb178 fffaaac8 4656b570 4644464d 4680b470
02-22 14:47:39.981: INFO/DEBUG(28): 80dfb188 6883b081 1c0d1c08 22b04798 46814442
02-22 14:47:39.981: INFO/DEBUG(28): 80dfb198 46921c10 f73d2600 4642ea90 6c546c13
02-22 14:47:39.981: INFO/DEBUG(28): code around lr:
02-22 14:47:39.981: INFO/DEBUG(28): 80dffde0 1c064a0b 589b447b 681c1c31 f7fb1c20
02-22 14:47:39.981: INFO/DEBUG(28): 80dffdf0 1c05f9c5 d0062800 d0042c00 23001c32
02-22 14:47:39.981: INFO/DEBUG(28): 80dffe00 f7fb1c20 1c28fa15 0000bd70 001a47f8
02-22 14:47:39.981: INFO/DEBUG(28): stack:
02-22 14:47:39.981: INFO/DEBUG(28): beb3c818 afe42ad4
02-22 14:47:39.981: INFO/DEBUG(28): beb3c81c ad07ff50 /system/lib/libdvm.so
02-22 14:47:39.990: INFO/DEBUG(28): beb3c820 0000bd00 [heap]
02-22 14:47:39.990: INFO/DEBUG(28): beb3c824 00000000
02-22 14:47:39.990: INFO/DEBUG(28): beb3c828 00085920 [heap]
02-22 14:47:40.000: INFO/DEBUG(28): beb3c82c 00000000
02-22 14:47:40.000: INFO/DEBUG(28): beb3c830 ffffffff
02-22 14:47:40.000: INFO/DEBUG(28): beb3c834 beb3c850 [stack]
02-22 14:47:40.015: INFO/DEBUG(28): beb3c838 00000000
02-22 14:47:40.015: INFO/DEBUG(28): beb3c83c 00000000
02-22 14:47:40.022: INFO/DEBUG(28): beb3c840 ad563b21 /system/lib/libicuuc.so
02-22 14:47:40.022: INFO/DEBUG(28): beb3c844 00085968 [heap]
02-22 14:47:40.030: INFO/DEBUG(28): beb3c848 00000001
02-22 14:47:40.050: INFO/DEBUG(28): beb3c84c 00000000
02-22 14:47:40.061: INFO/DEBUG(28): beb3c850 df002777
02-22 14:47:40.061: INFO/DEBUG(28): beb3c854 e3a070ad
02-22 14:47:40.070: INFO/DEBUG(28): #00 beb3c858 ad065714 /system/lib/libdvm.so
02-22 14:47:40.070: INFO/DEBUG(28): beb3c85c beb3c918 [stack]
02-22 14:47:40.070: INFO/DEBUG(28): beb3c860 000024b8
02-22 14:47:40.090: INFO/DEBUG(28): beb3c864 fffacafc
02-22 14:47:40.090: INFO/DEBUG(28): beb3c868 00000000
02-22 14:47:40.100: INFO/DEBUG(28): beb3c86c 80faed2c
02-22 14:47:40.100: INFO/DEBUG(28): beb3c870 00000068
02-22 14:47:40.122: INFO/DEBUG(28): beb3c874 80dffdf3 /data/data/android.TestApp/lib/libDM.so
02-22 14:47:40.122: INFO/DEBUG(28): #01 beb3c878 80f510dc /data/data/android.TestApp/lib/libDM.so
02-22 14:47:40.122: INFO/DEBUG(28): beb3c87c 80faed2c
02-22 14:47:40.122: INFO/DEBUG(28): beb3c880 80fa45e0 /data/data/android.TestApp/lib/libDM.so
02-22 14:47:40.122: INFO/DEBUG(28): beb3c884 80f1cc31 /data/data/android.TestApp/lib/libDM.so
02-22 14:47:41.240: DEBUG/Zygote(30): Process 504 terminated by signal (11)
最佳答案
您应该在 NDK bin 目录中有一份 arm-eabi-addr2line 的拷贝。您可以将其与以下命令一起使用:
arm-eabi-addr2line -f -e/path/to/lib/with/symbols.so 0x001fb18a
这将爬取共享库中的调试符号以获取文件和行号信息。为获得最佳结果,请为其提供一个未删除调试内容的库。
关于c++ - 从调用堆栈中获取函数名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2314273/
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url
我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file
我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge
我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c
我安装了ruby版本管理器,并将RVM安装的ruby实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby。有没有办法让emacs像shell一样尊重ruby的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我需要一些关于TDD概念的帮助。假设我有以下代码defexecute(command)casecommandwhen"c"create_new_characterwhen"i"display_inventoryendenddefcreate_new_character#dostufftocreatenewcharacterenddefdisplay_inventory#dostufftodisplayinventoryend现在我不确定要为什么编写单元测试。如果我为execute方法编写单元测试,那不是几乎涵盖了我对create_new_character和display_invent