VELT-0.1.5开发:中断MinGW gdb的执行

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

  1. 支持x86 Linux,海思hi3516/hi3520,MinGW这几个平台,提供这几个平台的项目模板。
  2. 完成UBOOT的编译,并根据编译的错误信息自动定位到相应的文件位置。
  3. 完成LINUX内核的编译,并根据编译的错误信息自动定位到相应的文件位置。
  4. 在VS下完成Linux内核的配置。
  5. 不使用Makefile进行Linux应用程序的编译。
  6. 使用Makefile进行Linux应用程序的开发。
  7. 使用SSH连接目标机器并用gdb进行应用程序的调试。
  8. 使用Telnet连接目标机器并用gdb进行应用程序的调试。
  9. 在VS中集成Linux终端(Poderosa),支持SSH/Telnet/Com,在打开终端时自动将VS的变量导出为bash里的变量,如ProjectDir等。

本文讨论在调用Mingw gdb时如何中断其执行过程。

当Mingw GDB加载程序并运行时,需要接收Ctrl-C中断程序的运行并进入调试状态。在先前的方案中,直接用GenerateConsoleCtrlEvent发送此事件就可以了。但在调试方案修改后这种方式是失败的,其原因在于GenerateConsoleCtrlEvent需要满足的条件之一是调用者必须拥有Console,但在修改后的方案中,直接在调试引擎下调用gdb,而调试引擎是没有Console的!

查了一下资料,似乎需要使用RemoteThread,但此法过于复杂了。

实际上,根据GenerateConsoleCtrlEvent失败的原因很容易可以想到,只要想办法在调用此函数前让它认为调用者拥有Console就可以了:

        //import in the declaration for GenerateConsoleCtrlEvent
        [DllImport("kernel32.dll", SetLastError = true)]
        static extern bool GenerateConsoleCtrlEvent(ConsoleCtrlEvent sigevent, int dwProcessGroupId);
        public enum ConsoleCtrlEvent
        {
            CTRL_C = 0,
            CTRL_BREAK = 1,
            CTRL_CLOSE = 2,
            CTRL_LOGOFF = 5,
            CTRL_SHUTDOWN = 6
        }

        [DllImport("kernel32.dll", SetLastError = true)]
        static extern bool AttachConsole(uint dwProcessGroupId);

        [DllImport("kernel32.dll", SetLastError = true)]
        static extern bool FreeConsole();

        /// <summary>
        /// 发送Ctrl-C
        /// </summary>
        override public void Break()
        {
            if (!AttachConsole((uint)_process.Id))
                return;

            if (!GenerateConsoleCtrlEvent(ConsoleCtrlEvent.CTRL_C, _process.Id))
                return;

            if (!FreeConsole())
                return;
        }

这里的_process就是在引擎中创建的cmd.exe进程。

先用AttatchConsole连接,再调用GenerateConsoleCtrlEvent发送Ctrl-C就没有问题了。

最后记得FreeConsole!

??

时间: 2024-10-14 20:19:28

VELT-0.1.5开发:中断MinGW gdb的执行的相关文章

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 studio的IDE中进行Linux应用程序的开发(包括编译和调试),也可以进行uboot和linux内核的编译,并根据编译时

让mingw gdb支持STL,并自动load .gdbinit

环境要求:python (2.7版本可以,3.x没测过),mingw官方版(你可能已经有了),gdb2013-02-04(到这里https://code.google.com/p/qp-gcc/downloads/list下载,如果有更新版本,应该也可以,目前2013-02-04是最新版) 推荐的GDB支持STL的方式是用python script.据说各方面都比那个stl-views-1.0.3.gdb要好(关于这个,可以参考http://blog.csdn.net/someonea/arti

第0课 - 搭建开发环境之安装QT

第0课 - 搭建开发环境之安装Qt 1. 课程学习的原材料 - Visual Studio 2010 - Qt SDK 4.7.4 - Qt Creator 2.4.1 2. Visual Studio 2010 (1)用于学习 Windows 上 GUI 程序设计的原理 (2)体会使用 C/C++ 编写 GUI 窗口应用程序 (3)展现 Qt 对于 Windows 窗口开发的面向对象封装 3. Qt SDK 与 Qt Creator - Qt SDK 为 Qt 开发提供必要的类和函数,以及相关

(转)VC6.0中OpenGL开发环境配置

首先简单介绍一下OpenGL: OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性.       OpenGL官方网站(英文)    http://www.opengl.org 然后设置编程的一些环境,及其安装必备文件的步骤如下: 第一步:选择一个编译环境 现在Windows系统的主流编译环境有Visual Studio,Broland C++ Builder,Dev-C++等,它们都是支持OpenGL的.但这里我们选择VC++ 6.0作为学习OpenGL的环

手游:cocos2d-x3.0 移植 wp8 开发 各种 “蛋疼”问题的汇总

蛋疼的问题的起源: wp8 做应用开发,显示显示中文,源码包含中文都是没有一点问题的, 只是cocos2d-x 的编码方式(UTF-8),引起的一系列的问题. 1:不能显示服务器返回的中文 2:c++ 包含中文的问题 解决方案: 微米黑--开元字体库, 提点:  非常小 ----未完待续... 手游:cocos2d-x3.0 移植 wp8 开发 各种 "蛋疼"问题的汇总,布布扣,bubuko.com

《DirectX 9.0 3D游戏开发编程基础》 第一章 初始化Direct3D 读书笔记

REF设备 参考光栅设备,他能以软件计算方式完全支持Direct3D Api.借助Ref设备,可以在代码中使用那些不为当前硬件所支持的特性,并对这此特性进行测试. D3DDEVTYPE 在程序代码中,HAL设备用值D3DDEVTYPE_HAL来表示.该值是一个枚举变量.REF设备用D3DDEVTYPE_REF来表示.这种类型非常重要,你需要铭记,因为在创建设备的时候,我们必须指定使用哪种设备类型. COM(组件对象模型) 创建COM接口时不可以使用c++关键字new.此外使用完接口,应调用Rel

Creo3.0二次开发

VS2008+Proe5.0二次开发:VS2010+Creo2.0二次开发:VS2012+Creo3.0二次开发这是PTC给的标准配置. Creo3.0修正了Prodevelop目录,不再需要添加这个目录下的Include和lib了.配置更为简单了. 但同时Creo3.0下的二次开发,ProToolkit修正了很多的常用函数,原来的函数名称被废弃了,Creo2.0开发的代码移植到3,.0下不会报错,但不能执行原有的功能. 版权声明:本文为博主原创文章,未经博主允许不得转载.

cocos2dx3.0 超级马里奥开发笔记(一)——loadingbar和pageview的使用

学完cocos2dx课程的第一个项目选择了超级玛丽.可以说有自己的想法,简单但是确实不简单. 我花了一天把一份2.1版本的超级玛丽源码升级到了3.0,改改删删,参考那个源码虽然好多不懂,但是马虎升级成功,游戏正常玩耍. 本着不为把游戏做出来而写代码的想法,罗列了一下这个游戏可以使用到的知识点.数据持久化的三种方式.loading页面.tmx地图解析.cocosStudio场景.屏幕适配.关卡如何选择.代码结构的优化(各种类的抽象继承),在基本功能出来后可以自己去设计变态关卡等. 两天实现了loa

SDL2.0的VS开发环境搭建

SDL2.0的VS开发环境搭建 [前言] 我是用的是VS2012,VS的版本应该大致一样. [开发环境搭建] >>>SDL2.0开发环境配置:1.从www.libsdl.org 下载SDL2.0开发工具,主要是include头文件目录及编译好的lib和dll文件,并解压:2.打开VS2012,新建空白工程:3.添加头文件路径.在工程上点击右键-->属性-->C/C++-->附加包含路径,输入1中解压的头文件路径(注意,需要先在工程中添加一个C或者C++的文件):4.添加