發表文章

目前顯示的是有「Debug」標籤的文章

好用的 Trace 工具 cflow

自己寫軟體,自己的邏輯,自己的世界,往往不會有什麼困難,這也是很多人從學生時代一路爬上來的歷程,直到進入到職場後撰寫著商業軟體,更是只有自己的一片天。但寫軟體有如寫作文,言之有物前必先廣閱天下文章,否則若是能獨樹一格是好,不能便陳腔濫調且原地踏步。但是看懂別人的程式實在是很困難的一件事,除了要懂他人寫程式的風格和思維外,還要通盤了解架構,這必須要有見山不是山的能力才能勝任。一般人想單靠著程式碼上彎彎曲曲的豆芽菜,反推回去程式的原貌,真有如瞎子摸象。對於做為一般人的我們,這時便要借助些工具,以幫助我們更省時省力的去 Trace 程式碼。 講到閱讀程式碼,『 cflow 』就是不得不提到的方便工具之一,它能夠幫助我們確認程式的大架構,以及分析程式碼相互的關聯性。這裡是使用 cflow 去演示分析 Android Dalvik VM,分析的檔案是 dalvik/dalvikvm/Main.c: $ cflow dalvikvm/Main.c main() <int main (int argc,char *const argv[]) at dalvikvm/Main.c:141>: setvbuf() malloc() memset() strdup() strcmp() fprintf() assert() blockSigpipe() <void blockSigpipe () at dalvikvm/Main.c:31>: sigemptyset() sigaddset() sigprocmask() fprintf() JNI_CreateJavaVM() createStringArray() <jobjectArray createStringArray (JNIEnv *env,char *const argv[],int argc) at dalvikvm/Main.c:44>: FindClass() ExceptionCheck() fprintf() assert() NewObjectArray() NewStrin...