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

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

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

    Calvin's Tech Space

    成于堅(jiān)忍,毀于浮躁

       :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
    首先,android平臺(tái)應(yīng)用程序可能產(chǎn)生以下四種crash:
    App層:
    Force close crash
    ANR crash
    Native層:
    Tombstone crash
    Kernel層:
    Kernel panic
    比較難定位,可以查看/proc/last_kmsg來(lái)輔助定位。

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

    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目錄下會(huì)生成相關(guān)日志,moneky會(huì)停止發(fā)送事件流并退出測(cè)試.值得注意的是,/data/tombstones文件夾下只會(huì)保存10個(gè)日志,超過(guò)10個(gè)后,最早創(chuàng)建的會(huì)被替換。而monkey是通過(guò)監(jiān)視這個(gè)文件夾下的文件數(shù)量變化來(lái)判斷是否有tombtone類型的crash產(chǎn)生的。因此,當(dāng)/data/tombstones文件夾下超過(guò)10個(gè)文件后,如果再有tombstone crash產(chǎn)生的話,monkey是不能檢測(cè)到的,它會(huì)繼續(xù)發(fā)送事件流。為了避免這個(gè)問(wèn)題,可以在每次運(yùn)行monkey之前先清空一下這個(gè)文件夾。

    另外,在settings.db中的secure表中有三個(gè)字段:dropbox:data_app_wtf,dropbox:data_app_anr,dropbox:data_app_crash。如果設(shè)置為enabled,每當(dāng)有app crash之后,在/data/system/dropbox這個(gè)文件夾下都會(huì)產(chǎn)生相關(guān)的日志信息,這對(duì)于分析調(diào)試問(wèn)題都是第一手的信息。

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

    關(guān)于jni調(diào)用,也有幾個(gè)問(wèn)題:
    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

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

    2、運(yùn)行時(shí)異常java.lang.UnsatisfiedLinkError
    tombstone_gen.cpp中
    static const char *classPathName = "com/android/demo/AndroidDemos";
    類名有誤,導(dǎo)致類鏈接錯(cuò)誤。

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

    posted on 2011-05-27 15:08 calvin 閱讀(3464) 評(píng)論(0)  編輯  收藏 所屬分類: Android
    主站蜘蛛池模板: 亚洲网红精品大秀在线观看| 免费91麻豆精品国产自产在线观看| 亚洲中文无码av永久| 色在线亚洲视频www| 青娱乐在线免费观看视频| 久久久久久av无码免费看大片 | 久久亚洲精品成人无码网站| 久久国产精品成人免费| 久久99国产亚洲精品观看| 久久久久se色偷偷亚洲精品av | 亚洲熟妇无码一区二区三区| 全黄A免费一级毛片| 无码国产精品一区二区免费式直播| 国产一区二区三区无码免费| 亚洲乱码中文字幕综合| 国产精品国产亚洲精品看不卡| 在线观看亚洲AV日韩AV| 永久在线毛片免费观看| 亚洲免费视频网站| 一级做a爰全过程免费视频毛片 | jizz中国免费| 国产伦精品一区二区三区免费下载| 怡红院亚洲红怡院在线观看| 无码日韩精品一区二区免费暖暖 | 亚洲女同成av人片在线观看| 18成禁人视频免费网站| 国产亚洲色婷婷久久99精品91| 亚洲欧美日韩久久精品| 国产一卡2卡3卡4卡无卡免费视频 国产一卡二卡3卡四卡免费 | 在线观看亚洲免费视频| 一二三四在线播放免费观看中文版视频 | 72pao国产成视频永久免费| 久久久久亚洲av无码专区| 国产色无码精品视频免费| 亚洲高清成人一区二区三区 | 免费视频精品一区二区| 亚洲AV无码成人精品区在线观看| 中文在线免费视频| 亚洲中文字幕久久精品无码APP| 美女18一级毛片免费看| 夜夜亚洲天天久久|