VELT-0.1.2开发:支持MinGW

快乐虾

http://blog.csdn.net/lights_joy/

欢迎转载,但请保留作者信息


1.1    什么是VELT


VELT的全称是Visual EmbedLinuxTools,它是一个与visual gdb类似的visual studio插件,用以辅助完成Linux开发。利用这个插件,将可以在visual studioIDE中进行Linux应用程序的开发(包括编译和调试),也可以进行ubootlinux内核的编译,并根据编译时的错误信息正确定位到源码。目前的版本是0.1.1,仅支持vs2013,是一个刚刚启动开发不久的插件。可以在CSDN下载频道下载(http://download.csdn.net/detail/lights_joy/8322193),安装过程参见《Vs2013+VELT-0.1.0进行Linux开发:环境搭建》。下面是它的基本功能:

  1. 支持x86 Linuxhi3516hi3520三个平台。

  2. 完成UBOOT的编译,并根据编译的错误信息自动定位到相应的文件位置。

  3. 完成LINUX内核的编译,并根据编译的错误信息自动定位到相应的文件位置。

  4. 完成LINUX内核的配置。

  5. 不使用Makefile进行Linux应用程序的编译。

  6. 使用SSH连接目标机器并用gdb进行应用程序的调试。

  7. 使用Telnet连接目标机器并用gdb进行应用程序的调试。



接下来让VELT支持MinGW,用ConsoleApplication工程进行试验。


1.2  添加MinGW平台支持


依照老办法,将C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Platforms目录下的子目录复制一份改名为MinGW,并执行字符串替换操作,我们就可以看到MinGW平台了。

VELT-0.1.2开发:支持MinGW_第1张图片

VELT-0.1.2开发:支持MinGW_第2张图片


1.3  修改工程文件,引用EmbedLinux.Msbuild.targets


修改LinuxShareLibConsoleApplication的工程文件,在

  <Import Condition="$(Platform)=='hi3516'" Project="$(EMBEDLINUX_ROOT)\msbuild\EmbedLinux.Msbuild.targets" />

之后添加一行:

  <Import Condition="$(Platform)=='MinGW'" Project="$(EMBEDLINUX_ROOT)\msbuild\EmbedLinux.Msbuild.targets" /> 


1.4  代码编译


出于效率的考虑,代码编译不再使用python完成,直接调用mingw下的gcc或者g++完成,仅需要配置好mingw的路径:

VELT-0.1.2开发:支持MinGW_第3张图片


除此以外,务必将c:\mingw\bin添加到系统的路径列表中,否则gcc将无法正确编译。


1.5  错误信息转换


mingw输出的错误信息类似于:


Z:\projects\test\LinuxConsoleApplication\LinuxShareLib>c:\mingw\\bin\gcc.exe  -c
       -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
tion it appears in

将之转换为VS可以识别的格式:

1>  main.c(9): error C2004:  'x' undeclared (first use in this function)

这样vs就可以正确定位错误发生的位置。


1.6  gdb调试


为了保持调试运行和非调试运行在参数配置上的一致性,仍然使用RemoteConsole这个代理程序,只是不再使用python,当然也不需要用户修改python代码。直接在RemoteConsole中调用mingw-gdb

mingw-gdb和其它平台下的gdb其实大同小异,只是不同版本在一些小细节上略有不同,对我们的调试器代码少量修改后很快就可以进入调试状态了。

VELT-0.1.2开发:支持MinGW_第4张图片


1.7  程序中断处理


按照之前的设计,当在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={addr="0x7705dbf6",func="KERNELBASE!CtrlRoutine",args=[],from="C:\\WINDO

WS\\SysWOW64\\KernelBase.dll"},thread-id="2",stopped-threads="all"

此时才是我们想要的中断。


再次执行

-exec-continue

^running

*running,thread-id="all"

(gdb)

=thread-exited,id="2",group-id="i1"

程序开始运行。

从上面这个过程可以看到,这里创建了一个新的线程来处理Ctrl-C的中断,当中断处理完成后这个线程也就完成使命了。


1.8  添加目标连接类型


最后添加目标连接类型,实际上在平台确定之后,这个应该就不是必须的,但为了和其它平台一致,还是加上一个叫MinGW的连接类型。








你可能感兴趣的:(linux,MSBuild,VS2013,velt)