【问题标题】:How to check crash log using android ndk in cocos2d-x如何在 cocos2d-x 中使用 android ndk 检查崩溃日志
【发布时间】:2013-08-28 11:39:21
【问题描述】:

我用cocos2d-x开发了一个游戏,在iOs上完美运行后,我转向android平台。

但它在 android 的某个地方运行,我只收到一些这样的错误日志:

08-26 10:49:23.823: A/libc(2884): Fatal signal 11 (SIGSEGV) at 0x0000000c (code=1), thread 2917 (Thread-285)

有了这个,我无法修复崩溃日志。

所以我的问题是如何检查崩溃日志堆栈?

在 SO 中,有一些类似的问题,但没有对我有用的答案。

Using ndk-stack to read crash logs

Unable to get line no from stack trace in android ndk

How to get Useful crashlog information Android Cocos2dx C++

【问题讨论】:

  • 遇到同样的错误……我的 cocos2d-x 代码运行良好……但同样的代码给出了这个错误

标签: android c++ android-ndk cocos2d-x stack-trace


【解决方案1】:

我在http://www.cocos2d-x.org/boards/6/topics/20437找到了完美的答案。

解决办法是:

当您在 LogCat 上遇到此类错误时,它们会保存在 $PROJECT_PATH/obj/local/armeabi 上,其中 $PROJECT_PATH 是您的 cocos2d-x android 项目的路径。要将消息符号化为可以理解的内容,您可以使用 ndk-stack 工具。

打开终端(或 Cygwin,但不确定)并输入

cd $ANDROID_NDK
adb logcat | ./ndk-stack -sym $PROJECT_PATH/obj/local/armeabi

地点:

$ANDROID_NDK 是你的 android NDK 的路径

$PROJECT_PATH 是你的 cocos2d-x android 项目的路径


我尝试了一下,得到以下堆栈跟踪:

********** Crash dump: **********
Build fingerprint: 'google/soju/crespo:4.1.2/JZO54K/485486:user/release-keys'
pid: 2884, tid: 2917, name: Thread-285  >>> com.gumichina.allen <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0000000c
Stack frame #00  pc 0062bfb4  /mnt/asec/com.gumichina.allen-2/lib/liballen.so (cocos2d::CCObject::release()+20): Routine release in /Users/tangyue/project/crosskaiser-native/application/proj.android/../../cocos2dx/cocoa/CCObject.cpp:82
Stack frame #01  pc 006d8094  /mnt/asec/com.gumichina.allen-2/lib/liballen.so (cocos2d::CCTouchHandler::~CCTouchHandler()+128): Routine ~CCTouchHandler in /Users/tangyue/project/crosskaiser-native/application/proj.android/../../cocos2dx/touch_dispatcher/CCTouchHandler.cpp:108
Stack frame #02  pc 006d8524  /mnt/asec/com.gumichina.allen-2/lib/liballen.so (cocos2d::CCTargetedTouchHandler::~CCTargetedTouchHandler()+84): Routine ~CCTargetedTouchHandler in /Users/tangyue/project/crosskaiser-native/application/proj.android/../../cocos2dx/touch_dispatcher/CCTouchHandler.cpp:193
Stack frame #03  pc 006d8570  /mnt/asec/com.gumichina.allen-2/lib/liballen.so (cocos2d::CCTargetedTouchHandler::~CCTargetedTouchHandler()+20): Routine ~CCTargetedTouchHandler in /Users/tangyue/project/crosskaiser-native/application/proj.android/../../cocos2dx/touch_dispatcher/CCTouchHandler.cpp:193
Stack frame #04  pc 0062bff4  /mnt/asec/com.gumichina.allen-2/lib/liballen.so (cocos2d::CCObject::release()+84): Routine release in /Users/tangyue/project/crosskaiser-native/application/proj.android/../../cocos2dx/cocoa/CCObject.cpp:86
Stack frame #05  pc 006aade4  /mnt/asec/com.gumichina.allen-2/lib/liballen.so (cocos2d::ccArrayRemoveObjectAtIndex(cocos2d::_ccArray*, unsigned int, bool)+100): Routine ccArrayRemoveObjectAtIndex in /Users/tangyue/project/crosskaiser-native/application/proj.android/../../cocos2dx/support/data_support/ccCArray.cpp:197
Stack frame #06  pc 006aafa0  /mnt/asec/com.gumichina.allen-2/lib/liballen.so (cocos2d::ccArrayRemoveObject(cocos2d::_ccArray*, cocos2d::CCObject*, bool)+72): Routine ccArrayRemoveObject in /Users/tangyue/project/crosskaiser-native/application/proj.android/../../cocos2dx/support/data_support/ccCArray.cpp:235
Stack frame #07  pc 0062fed4  /mnt/asec/com.gumichina.allen-2/lib/liballen.so (cocos2d::CCArray::removeObject(cocos2d::CCObject*, bool)+52): Routine removeObject in /Users/tangyue/project/crosskaiser-native/application/proj.android/../../cocos2dx/cocoa/CCArray.cpp:295
Stack frame #08  pc 006d6c90  /mnt/asec/com.gumichina.allen-2/lib/liballen.so (cocos2d::CCTouchDispatcher::forceRemoveDelegate(cocos2d::CCTouchDelegate*)+500): Routine forceRemoveDelegate in /Users/tangyue/project/crosskaiser-native/application/proj.android/../../cocos2dx/touch_dispatcher/CCTouchDispatcher.cpp:200
Stack frame #09  pc 006d7888  /mnt/asec/com.gumichina.allen-2/lib/liballen.so (cocos2d::CCTouchDispatcher::touches(cocos2d::CCSet*, cocos2d::CCEvent*, unsigned int)+1620): Routine touches in /Users/tangyue/project/crosskaiser-native/application/proj.android/../../cocos2dx/touch_dispatcher/CCTouchDispatcher.cpp:449
Stack frame #10  pc 006d7b74  /mnt/asec/com.gumichina.allen-2/lib/liballen.so (cocos2d::CCTouchDispatcher::touchesEnded(cocos2d::CCSet*, cocos2d::CCEvent*)+56): Routine touchesEnded in /Users/tangyue/project/crosskaiser-native/application/proj.android/../../cocos2dx/touch_dispatcher/CCTouchDispatcher.cpp:507
Stack frame #11  pc 0068acb8  /mnt/asec/com.gumichina.allen-2/lib/liballen.so (cocos2d::CCEGLViewProtocol::handleTouchesEnd(int, int*, float*, float*)+124): Routine handleTouchesEnd in /Users/tangyue/project/crosskaiser-native/application/proj.android/../../cocos2dx/platform/CCEGLViewProtocol.cpp:333
Stack frame #12  pc 0069340c  /mnt/asec/com.gumichina.allen-2/lib/liballen.so (Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeTouchesEnd+88): Routine Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeTouchesEnd in /Users/tangyue/project/crosskaiser-native/application/proj.android/../../cocos2dx/platform/android/jni/TouchesJni.cpp:42
Stack frame #13  pc 0001de30  /system/lib/libdvm.so (dvmPlatformInvoke+112)
Stack frame #14  pc 0004ce73  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+390)
Stack frame #15  pc 0004ef8f  /system/lib/libdvm.so (dvmResolveNativeMethod(unsigned int const*, JValue*, Method const*, Thread*)+174)
Stack frame #16  pc 00027260  /system/lib/libdvm.so
Stack frame #17  pc 0002bb38  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+180)
Stack frame #18  pc 0005f5b1  /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+272)
Stack frame #19  pc 0005f5db  /system/lib/libdvm.so (dvmCallMethod(Thread*, Method const*, Object*, JValue*, ...)+20)
Stack frame #20  pc 00054193  /system/lib/libdvm.so
Stack frame #21  pc 00012b90  /system/lib/libc.so (__thread_entry+48): Unable to open symbol file obj/local/armeabi//libc.so. Error (9): Bad file descriptor
Stack frame #22  pc 000122f4  /system/lib/libc.so (pthread_create+172): Unable to open symbol file obj/local/armeabi//libc.so. Error (9): Bad file descriptor

【讨论】:

  • Srinivass-MacBook-PRO:proj.android SrinivasJ$ cd /Users/SrinivasJ/android-ndk-r9 Srinivass-MacBook-PRO:android-ndk-r9 SrinivasJ$ adb logcat | ./ndk-stack -sym $PROJECT_PATH/obj/local/armeabi -bash: adb: command not found 我试着按照你说的那样检查....但是 adb coomand not found 错误获取...我需要加载 NDK或 SDK
  • 我也试过这个解决方案,但是在这个目录下找不到adb
  • @FilipeFerminiano @Sri 您应该将 adb 所在的 Android sdk 路径添加到您的系统 PATH。对我来说,它在$ANDROID_SDK/platform-tools
  • @pktangyue 感谢您的帮助,它很有用。但我不明白这个命令。你能解释一下我们通过管道从adb logcatndk-stack 吗?
  • 嗨,我收到了“'。”在 Windows 上不被识别为内部或外部命令”。如何解决?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-08
  • 1970-01-01
  • 2014-08-15
相关资源
最近更新 更多