您的位置:首页 > 其它

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

2015-01-19 21:38 218 查看
快乐虾http://blog.csdn.net/lights_joy/(QQ群:Visual EmbedLinux Tools 375515651)欢迎转载,但请保留作者信息

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

在使用MinGW gdb的时候遇到一个不解的问题。在调试下面这个简单程序的时候,当按下Ctrl-C中断程序的时候,导致程序异常退出。

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

下面是调试记录:


按照我们的预想,当按下Ctrl-C时,此时gdb应该将程序停在getchar函数上,可以看到栈和线程的信息,但实际上Ctrl-C直接导致程序结束,感觉好像是gdb将Ctrl-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;
}



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


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: