<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Calvin's Tech Space

    成于堅忍,毀于浮躁

       :: 首頁 :: 聯系 :: 聚合  :: 管理
    首先,android平臺應用程序可能產生以下四種crash:
    App層:
    Force close crash
    ANR crash
    Native層:
    Tombstone crash
    Kernel層:
    Kernel panic
    比較難定位,可以查看/proc/last_kmsg來輔助定位。

    最近需要通過monkey工具測試Tombstone類型的crash,抓取log并分析。通過monkey測試,如果要抓取native類型的crash,需要加上--monitor-native-crash參數:

    seed=$(date +%Y%m%d%H%m%S)
    monkey -s $seed --pkg-whitelist-file ${your-package-list} --monitor-native-crashes --kill-process-after-error -v -v -v 2000000000

    這樣,monkey在跑出crash后,在/data/system/dropbox 和 /data/tombstones目錄下會生成相關日志,moneky會停止發送事件流并退出測試.值得注意的是,/data/tombstones文件夾下只會保存10個日志,超過10個后,最早創建的會被替換。而monkey是通過監視這個文件夾下的文件數量變化來判斷是否有tombtone類型的crash產生的。因此,當/data/tombstones文件夾下超過10個文件后,如果再有tombstone crash產生的話,monkey是不能檢測到的,它會繼續發送事件流。為了避免這個問題,可以在每次運行monkey之前先清空一下這個文件夾。

    另外,在settings.db中的secure表中有三個字段:dropbox:data_app_wtf,dropbox:data_app_anr,dropbox:data_app_crash。如果設置為enabled,每當有app crash之后,在/data/system/dropbox這個文件夾下都會產生相關的日志信息,這對于分析調試問題都是第一手的信息。

    如何制造tombstone類型的crash?
    這需要通過jni調用一個native的so文件,在本地代碼中拋出異常即可。
    可以編寫如下代碼tombstone_gen.cpp:
    int main(int argc, char **argv) {
    ? int *p=0;
    ? *p=1;??? //will seg fault
    ? return 0;
    }
    參照development/samples/SimpleJNI的示例,運行build出的apk即可。

    關于jni調用,也有幾個問題:
    1.FindClass,RegisterNatives等找不到:
    target thumb C: libtombstonec <= development/samples/AndroidDemos/jni/tombstone_gen.c
    development/samples/AndroidDemos/jni/tombstone_gen.c: In function 'registerNativeMethods':
    development/samples/AndroidDemos/jni/tombstone_gen.c:48: error: request for member 'FindClass' in something not a structure or union
    development/samples/AndroidDemos/jni/tombstone_gen.c:53: error: request for member 'RegisterNatives' in something not a structure or union
    development/samples/AndroidDemos/jni/tombstone_gen.c: In function 'JNI_OnLoad':
    development/samples/AndroidDemos/jni/tombstone_gen.c:97: error: request for member 'GetEnv' in something not a structure or union
    make: *** [out/target/product/generic/obj/SHARED_LIBRARIES/libtombstonec_intermediates/tombstone_gen.o] Error 1

    問題原因在于:
    如果是C程序,要用 (*env)->
    如果是C++要用 env->
    因此有兩種解決方法:
    1、將 (*env)-> 改為 env->
    2、將c文件改為cpp文件,改為c++的方式編譯。

    2、運行時異常java.lang.UnsatisfiedLinkError
    tombstone_gen.cpp中
    static const char *classPathName = "com/android/demo/AndroidDemos";
    類名有誤,導致類鏈接錯誤。

    最后,關于jni中JNINativeMethod相關解釋:
    http://hi.baidu.com/zhlg_hzh/blog/item/f0d782081f2f45d963d986f5.html

    posted on 2011-05-27 15:08 calvin 閱讀(3465) 評論(0)  編輯  收藏 所屬分類: Android
    主站蜘蛛池模板: 一级毛片免费在线观看网站| 亚洲精品国产福利一二区| 亚洲va乱码一区二区三区| 91久久精品国产免费一区| 亚洲av无码成h人动漫无遮挡| 两性色午夜免费视频| 亚洲午夜国产片在线观看| 一级毛片完整版免费播放一区| 亚洲区日韩区无码区| 精品一区二区三区免费观看 | 日本免费一区二区三区最新 | 亚洲欧洲视频在线观看| 麻豆成人久久精品二区三区免费| 亚洲国产第一页www| 99视频在线免费| 亚洲精品成人图区| 国产香蕉免费精品视频| 精品久久亚洲中文无码| 成人毛片18女人毛片免费96| 亚洲日韩av无码中文| 日本久久久免费高清| 精品在线观看免费| 亚洲免费无码在线| 热久久这里是精品6免费观看| 亚洲AV无码乱码在线观看裸奔| 久久免费国产视频| 亚洲精品偷拍无码不卡av| 99在线视频免费观看视频| 亚洲日本成本人观看| 免费萌白酱国产一区二区| 九九免费观看全部免费视频| 亚洲人成网站在线播放vr| 污污网站免费观看| 亚洲国产情侣一区二区三区| 成人毛片免费视频| 精品国产亚洲AV麻豆| ZZIJZZIJ亚洲日本少妇JIZJIZ| 久久精品免费一区二区三区| 亚洲精品自在线拍| 国产资源免费观看| 精品一区二区三区免费视频 |