2012年12月1日 星期六

[C++] A *a 和 A *aa = new A 的差別

在寫C++過程中,指標的使用與操作是最頻繁被使用的,有些難解的bug,通常point佔絕大多數,這裡複習一個很基本的概念。

如下面的例子,個別使用兩個a指標,也各自呼叫他們的member function test(),發覺都可以印出test的字串,但為什麼第一個指標明明是指向undefine的空間,為什麼不會出現問題呢,不是應該要出現Segmentation Fault嗎?

這裡隱藏一個很重要,也很容易被誤解的觀念,通常使用null point或不知指向何處的point時,操作member function是不會發生Segmentation Fault的,會產生Segmentation Fault是在操作它的member時,如果下面的程式碼多加上一段a->value的話,當程式運行到這一行就會發生crash了。

2012年11月11日 星期日

[Aadroid] Android版本控制工具---Repo(轉)

Android 原始碼下載及版本控制 - 使用git與repo

要取得Android的原始碼,會需要用到GitRepo還有Gerrit。 以下解釋一些工具,太冗長,可直接拉到最下方看如何取得Android原始碼。

什麼是Git?

Git is an open-source version-control system designed to handle very large projects that are distributed over multiple repositories.

那Git for Android是?

In the context of Android, we use Git for local operations such as local branching, commits, diffs, and edits. One of the challenges in setting up the Android project was figuring out how to best support the outside community–from the hobbiest community to large OEMs building mass-market consumer devices. We wanted components to be replaceable, and we wanted interesting components to be able to grow a life of their own outside of Android. We first chose a distributed revision control system, then further narrowed it down to Git.

2012年11月1日 星期四

[Tool] Source Insight常用的快捷鍵

@Source Insight常用的快捷鍵:

  • Ctrl+= :Jump to definition
  • Alt+/ :Look up reference
  • Alt+分頁標題首字字母 : 切換至該標題的頁面
  • F3 : search backward
  • F4 : search forward
  • F5: go to Line
  • F7 :Look up symbols
  • F8 :Look up local symbols
  • F9 :Ident left
  • F10 :Ident right
  • Alt+, :Jump backword
  • Alt+. : Jump forward
  • Shift+F3 : search the word under cusor backward
  • Shift+F4 : search the word under cusor forward
  • F12 : incremental search
  • Shift+Ctrl+f: search in project
  • shift+F8 : hilight word

2012年10月27日 星期六

[Vim]常用的技巧記錄

@VIM外掛安裝方式

透過github
(1)使用git submodule add  "要安裝plugin的路徑"   bundle/plugin-name
frank@frank:~/.vim$ git submodule add https://github.com/vim-scripts/taglist.vim.git bundle/Taglist  ./bundle/Taglist

(2)輸入指令初始化外掛
frank@frank:~/.vim$ git submodule init

2012年10月13日 星期六

[C++]必須傳回物件時,別妄想傳回其reference

函數的回傳值使用上要非常的小心,雖然程式寫久了,這算是比較基礎的概念,但有時一疏忽,往往就會造成系統Crash,簡單來說,函式產生新物件的路徑有二,在Stack空間或是在Heap空間裡,以底下例子來說。

const Rational& operator* (const Rational& lhs,
                                        const Rational& lhs)
{
    Rational result(lhs.n * rhs.n, lhs.d* rhs.d)
    return result;
}

2012年9月21日 星期五

[C++]寧以pass-by-reference-to-const取代pass-by-value

在C++裡函式參數使用pass-by-value的話,會造成參數的傳遞成本增加,所以在C++應用程式或是component開發上比較少使用pass-by-value。

Google C++ Style Guide裡有提到Google內部使用C++ coding的規則,從裡面也可以看到Google的rule為所有函式的參數必須是pass-by-reference,並且加上cosnt,表示傳入的參數是不可以變動的,這時你可能會有個疑問,如果函式的實作需要修改到傳入的參數怎麼辦,當然這應該是很常見的case,所以他們對於需要更改操作的arguments,可以使用pass-by-point的方式。

2012年9月15日 星期六

[Android] 常用的adb指令


身處在開發Android的公司,adb指令可以說是跟mobile device有非常密切的關係,舉凡push, pull data到devices上,甚至debug除錯等,都會需要使用到adb工具,所以了解並熟悉adb的一些指令對於開發上具有非常大之幫助。


◎這裡列出官網上提到,以及比較常使用到的指令

1.adb devices (顯示目前有多少個模擬器正在執行) 

2.adb -s (指定模擬器來操作)  
    Ex:adb -s emulator-5554 install camera.apk

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去搜尋某些特定字串,有一些使用方式記錄下來,可以方便以後快速查詢。

[root@www ~]# grep [-acinv] [--color=auto] '搜尋字串' filename
選項與參數:
-a :將 binary 檔案以 text 檔案的方式搜尋資料
-c :計算找到 '搜尋字串' 的次數
-i :忽略大小寫的不同,所以大小寫視為相同
-n :順便輸出行號
-v :反向選擇,亦即顯示出沒有 '搜尋字串' 內容的那一行!
--color=auto :可以將找到的關鍵字部分加上顏色的顯示喔!


1.以 grep 尋找一個檔案中的文字:
grep "abc" file.txt
2.如果要在子資料夾間搜尋,可以用
grep -r "abc" .
來完成,以 -r 來表示要遞迴子資料夾,而 . 則是代表由所在資料夾開始搜尋。
3.還可以用 --include 來指示目標檔案名稱:
grep -r --include="*.php" abc .
或用 --exclude 來排除一些檔案:

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有關嗎?