日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【玩转cocos2d-x之三十八】如何使用NDK-STACK tool来恢复Cocos2d-x安卓错误堆栈信息

發布時間:2024/4/11 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【玩转cocos2d-x之三十八】如何使用NDK-STACK tool来恢复Cocos2d-x安卓错误堆栈信息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
很多童鞋在糾結在Cocos2d-x中安卓項目如何調試JNI部分的C++代碼,在吃完2個茶葉蛋后我決定放大招。。。

本文翻譯自: http://www.cocos2d-x.org/forums/6/topics/46225

1.安卓 NDK-STACK tool

NDK-Stack 是一個非常易用的工具,它通過將信息顯示到adb logcat中來輔助你分析堆棧追蹤,然后用相應的值(哪篇源碼的哪一行)來替代靜態鏈接庫中的地址。
在adb logcat的輸出區,你可以看到類似下面的信息,但是在此之前我們必須先先對它進行解析。
[cpp]?view plaincopy
  • I/DEBUG???(???31):?***?***?***?***?***?***?***?***?***?***?***?***?***?***?***?***??
  • I/DEBUG???(???31):?Build?fingerprint:?'generic/google_sdk/generic/:2.2/FRF91/43546:eng/test-keys'??
  • I/DEBUG???(???31):?pid:?351,?tid:?351??%gt;%gt;%gt;?/data/local/ndk-tests/crasher?<<<??
  • I/DEBUG???(???31):?signal?11?(SIGSEGV),?fault?addr?0d9f00d8??
  • I/DEBUG???(???31):??r0?0000af88??r1?0000a008??r2?baadf00d??r3?0d9f00d8??
  • I/DEBUG???(???31):??r4?00000004??r5?0000a008??r6?0000af88??r7?00013c44??
  • I/DEBUG???(???31):??r8?00000000??r9?00000000??10?00000000??fp?00000000??
  • I/DEBUG???(???31):??ip?0000959c??sp?be956cc8??lr?00008403??pc?0000841e??cpsr?60000030??
  • I/DEBUG???(???31):??????????#00??pc?0000841e??/data/local/ndk-tests/crasher??
  • I/DEBUG???(???31):??????????#01??pc?000083fe??/data/local/ndk-tests/crasher??
  • I/DEBUG???(???31):??????????#02??pc?000083f6??/data/local/ndk-tests/crasher??
  • I/DEBUG???(???31):??????????#03??pc?000191ac??/system/lib/libc.so??
  • I/DEBUG???(???31):??????????#04??pc?000083ea??/data/local/ndk-tests/crasher??
  • I/DEBUG???(???31):??????????#05??pc?00008458??/data/local/ndk-tests/crasher??
  • I/DEBUG???(???31):??????????#06??pc?0000d362??/system/lib/libc.so??
  • I/DEBUG???(???31):??
  • 2.如何使用這個工具?

    如果你成功地編譯了一個Cocos2d-x安卓項目,它將會在$PROJECT_PATH/obj/local/<abi>目錄下生產一個靜態鏈接庫,這里的<abi>代表你的設備的ABI(比如,默認為armeabi)。

    你可以將輸出結果作為輸入,就像下面這樣:

    [cpp]?view plaincopy
  • adb?logcat?|?$NDK/ndk-stack?-sym?$PROJECT_PATH/obj/local/armeabi??
  • 或者你也可以使用 -dump選項將指定logcat保存為文件作為輸入,就像下面這樣:

    [cpp]?view plaincopy
  • adb?logcat?>?/tmp/foo.txt??
  • $NDK/ndk-stack?-sym?$PROJECT_PATH/obj/local/armeabi?-dump?foo.txt??
  • 最后,你就可以得到更多有效可讀的輸出信息:

    [cpp]?view plaincopy
  • **********?Crash?dump:?**********??
  • Build?fingerprint:?'generic/google_sdk/generic/:2.2/FRF91/43546:eng/test-keys'??
  • pid:?351,?tid:?351??>>>?/data/local/ndk-tests/crasher?<<<??
  • signal?11?(SIGSEGV),?fault?addr?0d9f00d8??
  • Stack?frame?#00??pc?0000841e??/data/local/ndk-tests/crasher?:?Routine?zoo?in?/tmp/foo/crasher/jni/zoo.c:13??
  • Stack?frame?#01??pc?000083fe??/data/local/ndk-tests/crasher?:?Routine?bar?in?/tmp/foo/crasher/jni/bar.c:5??
  • Stack?frame?#02??pc?000083f6??/data/local/ndk-tests/crasher?:?Routine?my_comparison?in?/tmp/foo/crasher/jni/foo.c:9??
  • Stack?frame?#03??pc?000191ac??/system/lib/libc.so??
  • Stack?frame?#04??pc?000083ea??/data/local/ndk-tests/crasher?:?Routine?foo?in?/tmp/foo/crasher/jni/foo.c:14??
  • Stack?frame?#05??pc?00008458??/data/local/ndk-tests/crasher?:?Routine?main?in?/tmp/foo/crasher/jni/main.c:19??
  • Stack?frame?#06??pc?0000d362??/system/lib/libc.so??
  • 3.重要提示

    NDK-STACK tool的logcat輸出需要有一個初始化行,比如像下面這樣:

    [cpp]?view plaincopy
  • ***?***?***?***?***?***?***?***?***?***?***?***?***?***?***?***??
  • 當復制/粘帖追蹤信息時,不要忘記把這個初始化行也給帶上,否則NDK-STACK tool將不會正常的工作。
    目前對各平臺(linux/windows/mac)的NDK(可見 Android Developer ),NDK-STACK都是有效的。

    4.參考文檔

    $NDK_ROOT/docs/NDK-STACK.html

    總結

    以上是生活随笔為你收集整理的【玩转cocos2d-x之三十八】如何使用NDK-STACK tool来恢复Cocos2d-x安卓错误堆栈信息的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。