2012年8月25日 星期六
如何使用gsr偵測Memory Leakage
GSR是我們Project裡用來反覆執行相同動作的tool,主要可以用在系統開發階段後期,對於開發好的AP或是component進行壓力測試,順便也可以偵測記憶體使用情況,例如Lauhch與Exit某支AP,當這個動作運行5000次後,計算Memory的使用情況,藉此某個AP或是component 是否有Memory Leakage。
2012年8月4日 星期六
[Linux] 遞迴搜尋文字-grep
在Linux底下很常使用grep去搜尋某些特定字串,有一些使用方式記錄下來,可以方便以後快速查詢。
1.以 grep 尋找一個檔案中的文字:
2.http://www.openfoundry.org/tw/foss-programs/8628--linux-
[root@www ~]# grep [-acinv] [--color=auto] '搜尋字串' filename 選項與參數: -a :將 binary 檔案以 text 檔案的方式搜尋資料 -c :計算找到 '搜尋字串' 的次數 -i :忽略大小寫的不同,所以大小寫視為相同 -n :順便輸出行號 -v :反向選擇,亦即顯示出沒有 '搜尋字串' 內容的那一行! --color=auto :可以將找到的關鍵字部分加上顏色的顯示喔!
grep "abc" file.txt
2.如果要在子資料夾間搜尋,可以用
grep -r "abc" .
來完成,以 -r 來表示要遞迴子資料夾,而 . 則是代表由所在資料夾開始搜尋。
3.還可以用 --include 來指示目標檔案名稱:
grep -r --include="*.php" abc .
或用 --exclude 來排除一些檔案:
grep -r --exclude="*.jpg" search_text .
@參考資料:
1.http://linux.vbird.org/linux_basic/0320bash.php#grep2.http://www.openfoundry.org/tw/foss-programs/8628--linux-
2012年7月27日 星期五
[Git] 工作上常使用到的git指令
@可以看某個git check point的詳細紀錄
git log -p -l 2afeedb08454260516db332d70e661c3ae35e216
@git 退版
git checkout -b GoogleReader 2afeedb08454260516db332d70e661c3ae35e216
說明:新增一個GoogleReader的branch並還原到後面commit point的時間版本
@建立git push rule的範本
git config commit.template ~/git-template
@建立新的branch
git branch 'branch name'
Ex. git branch working; //建立一個名字為working的branch
@刪除branch
git branch -D
@只加修改過的檔案, 新增的檔案不加入
git add -u
2012年7月21日 星期六
[Android] android debug tool - addr2line
一、目的
當程式運作遇到segmentation fault時,可以使用工具來偵測發生錯誤的位置。
二、範例如下所示
通常一旦出錯,錯誤訊息都會秀出這樣的log,只要記錄下address,就可透過addr2line偵測到程式碼哪一個function出錯。
I/DEBUG ( 31): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG ( 31): Build fingerprint: 'generic/sdk/generic:2.3/GRH55/79397:eng/test-keys'
I/DEBUG ( 31): pid: 378, tid: 386 >>> com.example.gltest <<<
I/DEBUG ( 31): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000000
I/DEBUG ( 31): r0 001dbdc0 r1 00000001 r2 00000000 r3 00000000
I/DEBUG ( 31): r4 00000000 r5 40a40000 r6 4051a480 r7 42ddbee8
I/DEBUG ( 31): r8 43661b24 r9 42ddbed0 10 42ddbebc fp 41e462d8
I/DEBUG ( 31): ip 00000001 sp 436619d0 lr 83a12f5d pc 8383deb4 cpsr 20000010
I/DEBUG ( 31): #00 pc 0003deb4 /data/data/com.example.gltest/lib/libnativemaprender.so
I/DEBUG ( 31): #01 pc 00039b76 /data/data/com.example.gltest/lib/libnativemaprender.so
I/DEBUG ( 31): #02 pc 00017d34 /system/lib/libdvm.so
三、使用指令如下
格式:arm-linux-androideabi-addr2line -Cfi -e xxx.so 123456
實際使用:arm-linux-androideabi-addr2line -C -f -e obj/local/armeabi/libnativemaprender.so 0003deb4
2012年5月25日 星期五
[Android] Android resource觀念整理
以下整理一下Android resource核心的觀念跟作法,android resource其實也是一個複雜的東西,包含Style與Theme的撰寫,兩者的差異在哪,
以下列出幾點問題如果可以釐清,我想對於應該就已經攻破android resource了。
1.Resource有哪些,String、Color、boolean.......
2.各個名詞解釋,style、theme、attr是什麼,要能夠口頭敘述出來。
2.AttributeSet跟TypedArray是什麼? 兩者有什麼關聯性,在程式碼中怎麼使用。
3.Styleable是什麼,跟style有關嗎?
以下列出幾點問題如果可以釐清,我想對於應該就已經攻破android resource了。
1.Resource有哪些,String、Color、boolean.......
2.各個名詞解釋,style、theme、attr是什麼,要能夠口頭敘述出來。
2.AttributeSet跟TypedArray是什麼? 兩者有什麼關聯性,在程式碼中怎麼使用。
3.Styleable是什麼,跟style有關嗎?
2011年11月29日 星期二
dynamic linking library in linux
最近看到許多linux的新一點的project許多都使用dynamic linking來架構其C程式,其中dlopen這個系列雖然是很lightweight但是卻十分好用,幾年前看到dlopen的使用便覺得很酷,因此寫一個粗淺的文章來談談dlopen library。
不了解dynamic linking library嗎?我想一個例子便是Microsoft的COM架構,這類的方式有許多好處,首先是對於軟體設計人員可以更自由的與其他人開發的library獨立開發。這裡要知道的是他確實是dynamic的來連結,一般的library的linking多是在linker的階段完成,也就是說在你執行ld的時候(或是由gcc呼叫ld)便將library與執行檔的symbol link完成。因此就算你是用shared library依然在link stage後便會與特定的library有連結。
原本這樣的做法很OK,但是隨著軟體設計的彈性需求越來越被重視,一個問題開始出現:我們是不是可以在程式執行時期再來決定library的symbol link。因此一堆相對應的方式開始產生,Microsoft的COM元件便是很成功的一個方案,然而早期在linux卻苦無解決方案,直到dlopen這個library的出現。
其實他很簡單,大多數的動作都可以只用3個function便可以做完,分別是dlopen、dlsym與dlclose。dlopen當然是用來開啟一個動態連結的library,dlsym用來載入相關的symbol link,dlclose用來關閉library。我想這樣應該是有點難以了解,因此我們用一個簡單的例子來說明吧。假設我們有些情況需要求出一個連續整數的平方和,有時候卻要求立方和,現在假設求完和後的程式就跟求平方和或立方和的運算無關了,而且或許未來有4次方和或更高次方的需求,我想這是個可以考慮用dlopen來解決的狀況(好啦...這個例子太殺雞用牛刀...不過只是為了說明....睜隻眼閉隻眼吧)。
首先我們必須先定義好我們的dynamic linking library的interface,因此我們寫下了定義的include檔如下
當我們要用到這些動態的library的時候,我們可以用剛剛提到的3個function來處理,這裡我定義一個function來計算如下
最後是我們怎麼完成一個獨立的library的時候了,一個簡單的做法如下
轉貼自:http://sites.google.com/site/joepasscheng/dynamiclink
不了解dynamic linking library嗎?我想一個例子便是Microsoft的COM架構,這類的方式有許多好處,首先是對於軟體設計人員可以更自由的與其他人開發的library獨立開發。這裡要知道的是他確實是dynamic的來連結,一般的library的linking多是在linker的階段完成,也就是說在你執行ld的時候(或是由gcc呼叫ld)便將library與執行檔的symbol link完成。因此就算你是用shared library依然在link stage後便會與特定的library有連結。
原本這樣的做法很OK,但是隨著軟體設計的彈性需求越來越被重視,一個問題開始出現:我們是不是可以在程式執行時期再來決定library的symbol link。因此一堆相對應的方式開始產生,Microsoft的COM元件便是很成功的一個方案,然而早期在linux卻苦無解決方案,直到dlopen這個library的出現。
其實他很簡單,大多數的動作都可以只用3個function便可以做完,分別是dlopen、dlsym與dlclose。dlopen當然是用來開啟一個動態連結的library,dlsym用來載入相關的symbol link,dlclose用來關閉library。我想這樣應該是有點難以了解,因此我們用一個簡單的例子來說明吧。假設我們有些情況需要求出一個連續整數的平方和,有時候卻要求立方和,現在假設求完和後的程式就跟求平方和或立方和的運算無關了,而且或許未來有4次方和或更高次方的需求,我想這是個可以考慮用dlopen來解決的狀況(好啦...這個例子太殺雞用牛刀...不過只是為了說明....睜隻眼閉隻眼吧)。
首先我們必須先定義好我們的dynamic linking library的interface,因此我們寫下了定義的include檔如下
struct integer_list {
struct integer_list *next;
int num;
};
typedef void(*show_info)();
typedef int(*begin_calc)(struct integer_list *l);
typedef struct _func_plugin
{
show_info info;
begin_calc calc;
} func_plugin;
typedef func_plugin*(*get_plugin_interface)();
首先,因為我們要有一串未定長度的整數,因此我們用linked list來儲存他(這時候就會很懷念C++ STL的vector),這個介面只需要一個計算的function,但為了說明清楚一點,我們再給他一個秀出自己訊息的function。將他包在一個結構中後,在定義一個回傳symbol的function就可以。當我們要用到這些動態的library的時候,我們可以用剛剛提到的3個function來處理,這裡我定義一個function來計算如下
int use_plugin(char *plugin_file, struct integer_list *n)
{
void* plugin;
func_plugin *f;
int result=-1;
plugin = dlopen(plugin_file, RTLD_NOW);
if (!plugin)
{
printf("Open plugin error\n");
return -1;
}
get_plugin_interface get_func;
get_func = (get_plugin_interface) dlsym(plugin, "get_plugin");
if (!get_func)
{
printf("dlsym error\n");
dlclose(plugin);
return -1;
}
f = get_func();
f->info();
result = f->calc(n);
dlclose(plugin);
return result;
}
你可以看到這個函數接受兩個參數,一個是我們要使用的library的位置,另一個是我們要計算的整數列,軟體開發者在開發階段已經可以利用dl library將程式編譯成執行檔而不用去在意library的實作,當然你在程式要去輸入你要使用的library位置(command-line參數或設定檔....隨你高興吧)。最後是我們怎麼完成一個獨立的library的時候了,一個簡單的做法如下
#include很簡單吧,你只要去真正實作介面定義的函式便好,因此假設我們這個程式檔叫作square_sum.c,我們可以這樣製造出我們要的library
gcc -shared -fPIC -W1,-soname,libsqr_sum.so -o libsqr_sum.so square_sum.c這樣一來我們的簡單示範就完成啦,因此你可以發現你可以任意替換掉計算的部份,只要你傳入不同的library進去。下次要開始你的project之前或許先想想是否有一些部份也是有這方面需求,試試dl library來完成你複雜的架構吧。不過.....台灣的軟體開發好像最不給開始的規劃時間....ㄏㄏ.....算了,engineer們,玩的高興就好。
轉貼自:http://sites.google.com/site/joepasscheng/dynamiclink
2011年10月29日 星期六
[Flex]如何在tree中使用搜尋功能
Flex裡內建的元件非常豐富,都是能幫助我們能夠快速開發的好幫手, 今天要介紹一下tree此元件,有使用過的人都曉得,若目前要開發的功能 需要主副階層的呈現方式,那麼List可能就不符合我們所想要的囉!此時 tree就派上用場了,本文要介紹就是當tree的類別累積未來越多時,如何 透過搜尋的欄位,快速找尋到我們所要的項目。
訂閱:
文章
(
Atom
)