快樂蝦
velt
的全稱是
visual embedlinuxtools
,它是乙個與
visual gdb
類似的visual studio
外掛程式,用以輔助完成
linux
開發。利用這個外掛程式,將可以在
visual studio
的ide
中進行linux
應用程式的開發(包括編譯和除錯),也可以進行
uboot
和linux
核心的編譯,並根據編譯時的錯誤資訊正確定位到原始碼。目前的版本是
0.1.1
,僅支援
vs2013
,是乙個剛剛啟動開發不久的外掛程式。可以在
csdn
),安裝過程參見《
用vs2013+velt-0.1.0
進行linux
開發:環境搭建
》。下面是它的基本功能:
支援x86 linux
,hi3516
,hi3520
三個平台。
完成uboot
的編譯,並根據編譯的錯誤資訊自動定位到相應的檔案位置。
完成linux
核心的編譯,並根據編譯的錯誤資訊自動定位到相應的檔案位置。
完成linux
核心的配置。
不使用makefile
進行linux
應用程式的編譯。
使用ssh
連線目標機器並用
gdb進行應用程式的除錯。
使用telnet
連線目標機器並用
gdb進行應用程式的除錯。
接下來讓
velt
支援mingw
,用工程進行試驗。
依照老辦法,將
c:\program files (x86)\msbuild\microsoft.cpp\v4.0\v120\platforms
目錄下的子目錄複製乙份改名為
mingw
,並執行字串替換操作,我們就可以看到
mingw
平台了。
修改linuxsharelib
和的工程檔案,在
<
import
condition
="$(platform)=='hi3516'
" project
="$(embedlinux_root)\msbuild\embedlinux.msbuild.targets
" />
之後新增一行:
<
import
condition
="$(platform)=='mingw'
" project
="$(embedlinux_root)\msbuild\embedlinux.msbuild.targets
" />
出於效率的考慮,**編譯不再使用
python
完成,直接呼叫
mingw
下的gcc
或者g++
完成,僅需要配置好
mingw
的路徑:
除此以外,務必將
c:\mingw\bin
新增到系統的路徑列表中,否則
gcc將無法正確編譯。
mingw
輸出的錯誤資訊類似於:
-o0 -g3 -o ..\obj\mingw\debug\linuxsharelib\main.obj main.c
main.c: in function 'sum_test':
main.c:9:2: error: 'x' undeclared (first use in this function)
x = 5;
^main.c:9:2: note: each undeclared identifier is reported only once for each func
將之轉換為
vs可以識別的格式:
1>main.c(9): error c2004:'x' undeclared (first use in this function)
這樣vs
就可以正確定位錯誤發生的位置。
為了保持除錯執行和非除錯執行在引數配置上的一致性,仍然使用
remoteconsole
這個**程式,只是不再使用
python
,當然也不需要使用者修改
python
**。直接在
remoteconsole
中呼叫mingw-gdb
。mingw-gdb
和其它平台下的
gdb其實大同小異,只是不同版本在一些小細節上略有不同,對我們的偵錯程式**少量修改後很快就可以進入除錯狀態了。
按照之前的設計,當在
remoteconsole
下按ctrl-c
時將中斷程式的執行,進入除錯狀態,但
mingw-gdb
和其它平台的
gdb有所差異,此時它的輸出是:
=thread-created,id="2",group-id="i1"
~"[new thread 47020.0x288c]\n"
~"[switching to thread 47020.0x288c]\n"
*stopped
^error,msg="quit (expect signal sigint when the program isresumed)"
(gdb)
此時程式並未真正中斷,需要執行
-exec-continue
^running
*running,thread-id="all"
(gdb)
*stopped,reason="signal-received",signal-name="sigint",signal-meaning="interrupt
",frame=,thread-id="2",stopped-threads="all"
此時才是我們想要的中斷。
再次執行
-exec-continue
^running
*running,thread-id="all"
(gdb)
=thread-exited,id="2",group-id="i1"
程式開始執行。
從上面這個過程可以看到,這裡建立了乙個新的執行緒來處理
ctrl-c
的中斷,當中斷處理完成後這個執行緒也就完成使命了。
最後新增目標連線型別,實際上在平台確定之後,這個應該就不是必須的,但為了和其它平台一致,還是加上乙個叫mingw的連線型別。
VELT 0 1 2開發 斷點錯誤處理
在0.1.1 版本中,沒有處理斷點錯誤的問題,當斷點所在的位置沒有可執行 或者由於特定原因無法繫結斷點時,偵錯程式將崩潰。原因在於當偵錯程式啟動時,將呼叫 gdb的 break insert 命令,在正常情況下此命令返回的字串類似於 break insert rc.c 1564 當錯誤發生時,此命令...
VELT 0 1 3開發 引數整理
快樂蝦 群 visual embedlinux tools 375515651 velt 的全稱是 visual embedlinuxtools 它是乙個與 visual gdb 類似的visual studio 外掛程式,用以輔助完成 linux 開發。利用這個外掛程式,將可以在 visual s...
VELT 0 1 3開發 除錯引數
快樂蝦 群 visual embedlinux tools 375515651 velt 的全稱是 visual embedlinuxtools 它是乙個與 visual gdb 類似的visual studio 外掛程式,用以輔助完成 linux 開發。利用這個外掛程式,將可以在 visual s...