VELT-0.1.3开发: MinGW gdb的一个奇怪问题

快乐虾

http://blog.csdn.net/lights_joy/(QQ群:Visual EmbedLinux Tools 375515651)

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


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

  1. 支持x86 Linuxhi3516hi3520MinGW这几个平台。

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

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

  4. 完成LINUX内核的配置。

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

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

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


在使用MinGW gdb的时候遇到一个不解的问题。

在调试下面这个简单程序的时候,当按下Ctrl-C中断程序的时候,导致程序异常退出。


int main(int argc, char* argv[])
{
	printf("i'm here!\n");
	getchar();
	return 0;
}

下面是调试记录:

VELT-0.1.3开发: MinGW gdb的一个奇怪问题_第1张图片


按照我们的预想,当按下Ctrl-C时,此时gdb应该将程序停在getchar函数上,可以看到栈和线程的信息,但实际上Ctrl-C直接导致程序结束,感觉好像是gdbCtrl-C做为一个字符喂给了getchar,然后应用程序就直接结束了。

验证一下,将程序改为:

int main(int argc, char* argv[])
{
	printf("i'm here!\n");
	int c = getchar();
	printf("getchar returns %d\n", c);
	while(true)
		Sleep(100);
	return 0;
}
VELT-0.1.3开发: MinGW gdb的一个奇怪问题_第2张图片


这回就看得很清楚了,Ctrl-C除了让gdb中断程序和执行外,还导致了getchar函数退出,但是奇怪的是此时getchar得到的值是-1,而不是Ctrl-C的值0x3









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