VELT-0.1.5开发:在vs2013下编译gdb

VELT的全称是Visual EmbedLinuxTools,它是一个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等。

开始时并不打算在VS2013下编译gdb,只是在MINGW下编译gdb-7.8.2总有问题,再加上对调试技术的学习无论如何绕不过gdb,因而决定在vs2013下将gdb重新编译一遍。

编译的基本过程为:

首先在linux编译gdb,让其生成一些动态生成的文件如config.h,init.c等,这些文件是在configure时生成的。接着从main函数开始,根据链接错误逐步加入所需要的文件,而不是一次把所有文件都添加到工程中,因为有许多文件是不需要的。在添加过程中进行一些简单语法差异的修改。

下面列出几个主要的修改:

  • include_next

    在gdb的头文件中使用了

    #include_next <wctype.h>

    这样的包含语句,处理方式是将头文件改名,再用VS支持的include包含。

  • config.h

    这个配置文件是动态生成的,定义了开发环境的一些特性,这个需要根据VS的支持进行修改,也是改动最大的。

  • 特定变量

    gdb中有一些特定的变量, 如

    char small;

    而small在vs下是一个宏定义:

    #define small char

    因而直接将变量改名即可,类似的还有class,INT等。

  • 动态数组定义

    类似于这样的

    unsigned int size = sizeof(CV_INFO_PDB70) + 1;

    CV_INFO_PDB70 *cvinfo70;

    char buffer[size];

    修改为:

    char *buffer =(char*)_alloca(size);

  • 宏定义

    gcc下的定义:

    #define DEBUG(msg, args...)                                                \

    do                                                                                    \

    {                                                                                   \

    if (record_debug != 0)                                                \

    fprintf_unfiltered(gdb_stdlog,                                              \

    "[btrace] " msg "\n",##args);                   \

    vs下的定义:

    #define DEBUG(msg,...)                     \

    do                                    \

    {                                   \

    if (record_debug!= 0)                        \

    fprintf_unfiltered (gdb_stdlog,                 \

    "[btrace]" msg"\n",__VA_ARGS__);     \

  • 结构体初始化

    gcc:

    const struct cplus_struct_type cplus_struct_default = { };

    vs:

    const struct cplus_struct_type cplus_struct_default = {0 };

  • init.c

    这个文件是动态生成的,根据不同的配置自动加上需要的初始化函数,需要根据实际情况进行修改,如默认情况下gdb是支持tui的,但tui需要curses库,而这个库是不支持vs的,因此只能去除其中的tui初始化模块。

  • 文件打开方式

    在fopen_same.h中定义了打开文件时使用的方式:

    #define FOPEN_RB  "r"

    #define FOPEN_WB         "w"

    #define FOPEN_AB          "a"

    #define FOPEN_RUB       "r+"

    #define FOPEN_WUB      "w+"

    #define FOPEN_AUB       "a+"

    在VS下必须为:

    #define FOPEN_RB  "rb"

    #define FOPEN_WB         "wb"

    #define FOPEN_AB          "ab"

    #define FOPEN_RUB       "r+b"

    #define FOPEN_WUB      "w+b"

    #define FOPEN_AUB       "a+b"

    否则将无法进行文件的分析

  • readdir相关函数

    在VS下没有此函数,直接找一个别人实现的代码:

    // dirent.c

    #include <stdio.h>

    #include <windows.h>

    #include "dirent.h"

    static HANDLE hFind;

    DIR *opendir(const char *name)

    {

    DIR *dir;

    WIN32_FIND_DATAFindData;

    char namebuf[512];

    sprintf(namebuf,"%s\\*.*", name);

    hFind =FindFirstFile(namebuf, &FindData);

    if (hFind ==INVALID_HANDLE_VALUE)

    {

    printf("FindFirstFilefailed (%d)\n", GetLastError());

    return 0;

    }

    dir = (DIR*)malloc(sizeof(DIR));

    if (!dir)

    {

    printf("DIRmemory allocate fail\n");

    return 0;

    }

    memset(dir, 0,sizeof(DIR));

    dir->dd_fd =0;   // simulate return

    return dir;

    }

    struct dirent *readdir(DIR *d)

    {

    int i;

    static struct direntdirent;

    BOOL bf;

    WIN32_FIND_DATAFileData;

    if (!d)

    {

    return 0;

    }

    bf =FindNextFile(hFind, &FileData);

    //fail or end

    if (!bf)

    {

    return 0;

    }

    for (i = 0; i <256; i++)

    {

    dirent.d_name[i]= FileData.cFileName[i];

    if(FileData.cFileName[i] == ‘\0‘) break;

    }

    dirent.d_reclen = i;

    dirent.d_reclen =FileData.nFileSizeLow;

    //check there is fileor directory

    if(FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)

    {

    dirent.d_type= 2;

    }

    else

    {

    dirent.d_type= 1;

    }

    return (&dirent);

    }

    int closedir(DIR *d)

    {

    if (!d) return -1;

    hFind = 0;

    free(d);

    return 0;

    }

  • input.c

    这个文件需要定义__MINGW32__宏,才能正确地接受键盘输入。

    从上面可以看出,其实所需要的修改并不多,不是吗?

??

时间: 2024-12-13 00:50:23

VELT-0.1.5开发:在vs2013下编译gdb的相关文章

多媒体开发之--- live555 vs2010/vs2013下编译,使用,测试

Ⅰ live555简介 Live555 是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输协议如RTP/RTCP.RTSP.SIP等的支持.Live555实现了对多种音视频编码格式的音视频数据的流化.接收和处理等支持,包括MPEG.H.263+.DV.JPEG视频和多种音频编码.同时由于良好的设计,Live555非常容易扩展对其他格式的支持.目前,Live555已经被用于多款播放器的流媒体播放功能的实现,如VLC(VideoLan).MPlayer. 该项目的源代码包括

在VS2013下编译json-c库,并简单生成json格式数据

#include "stdafx.h"#include "json-c/json.h" int _tmain(int argc, _TCHAR* argv[]){ // 正常的json格式 json_object *json = json_object_new_object(); json_object_object_add(json, "name", json_object_new_string("laomeng")); j

【软件编译】vs2013下编译notepad++源码

1 下载notepad++源码 登录notepad++官网https://notepad-plus-plus.org/ 2 对scintilla进行编译,获得SciLexer.dll文件    具体编译方法请自行谷歌,本人赶时间,直接从已安装的notepad++中复制了一份. problem 1:如果没有这个文件会在一开始报错 problem 2:如果这个文件是自己编译获得的,则这个文件没有签名,也会报错. solution 2-1:只需要将验证签名的函数去掉或强行通过验证就可以了.(通过在整个

linux下编译qt5.6.0静态库——configure配置

 随笔 - 116  文章 - 4  评论 - 7 linux下编译qt5.6.0静态库--configure配置 linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberry选项: Android 选项: 生成makefile 遇到链接检查失败的情况 生成makefile后进行编译 编译时的错误 多重定义'QT_MODBUS()'和'QT_MODBU

VELT-0.1.6开发:在VS2013下用QEMU调试x86 Linux内核

快乐虾 http://blog.csdn.net/lights_joy/(QQ群:Visual EmbedLinux Tools 375515651) 欢迎转载,但请保留作者信息 VELT的全称是Visual EmbedLinuxTools,它是一个visual studio插件,用以辅助完成Linux开发.利用这个插件,将可以在visualstudio的IDE中进行Linux应用程序的开发(包括编译和调试),也可以进行uboot和linux内核的编译和调试,并根据编译时的错误信息正确定位到源码

VELT-0.1.5开发:在vs2013下调试Linux内核

快乐虾 http://blog.csdn.net/lights_joy/(QQ群:Visual EmbedLinux Tools 375515651) 欢迎转载,但请保留作者信息 本文仅适用于vs2013 + velt-0.1.5 VELT的全称是Visual EmbedLinuxTools,它是一个与visual gdb类似的visual studio插件,用以辅助完成Linux开发.利用这个插件,将可以在visual studio的IDE中进行Linux应用程序的开发(包括编译和调试),也可

用Vs2013+VELT-0.1.0进行Linux开发:环境搭建

快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 本文适用于vs2013 + Visual EmbedLinux Tools 0.1.1 1.1    什么是VELT VELT的全称是Visual EmbedLinuxTools,它是一个与visual gdb类似的visual studio插件,用以辅助完成Linux开发.利用这个插件,将可以在visual studio的IDE中进行Linux应用程序的开发(包括编译和调试),也可以进行ubo

何必苦等VS2015?来看看VS2013下实现移动端的跨平台开发

原文:何必苦等VS2015?来看看VS2013下实现移动端的跨平台开发 前一天准备下载VS2015预览版,到VisualStudio官网一看,发现微软发布了VisualStudio2013的插件——Visual Studio Tools for Apache Cordova,实现跨平台的开发.官网下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=42675,下面是截图: 点击下载扩展插件,双击开始安装,第一次打开出现如下错误

windows下cocos2dx3.0开发环境及Android编译环境搭建

cocos2dx更新到了3.x版本,自己一直没有换,现在开发组要求统一换版本,我就把搭建环境的过程记录下来. 一.Windowns下开发环境搭建 1.  所需工具 1)cocos2d-x-3.0rc0.zip   http://cn.cocos2d-x.org/download/  截止写博文时,最新版本为V3.2. 2)VS2012 http://www.baidu.com/s?wd=VS2012 3)Python  https://www.python.org/download/releas