VELT 0 1 2開發 支援MinGW

2021-06-28 04:57:41 字數 3626 閱讀 2708

快樂蝦

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...