首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

gdb无法识别c++二进制编译的`-g3`中的`typedef`或`using`

gdb是一款常用的调试工具,用于调试C和C++程序。在使用gdb调试时,有时会遇到无法识别C++二进制编译的-g3中的typedefusing的情况。

-g3是GCC编译器的一个选项,用于生成更详细的调试信息。在C++中,typedefusing用于定义类型别名,方便程序员使用更简洁的名称来表示复杂的类型。

然而,由于typedefusing是编译器的语法扩展,gdb在解析调试信息时可能无法正确识别这些类型别名。这可能导致在gdb中无法正确显示和使用这些类型别名。

解决这个问题的方法是使用g++编译器的-gdwarf-4选项代替-g3选项。-gdwarf-4选项生成的调试信息更加准确和完整,可以正确识别typedefusing定义的类型别名。

以下是使用g++编译器的示例命令:

代码语言:txt
复制
g++ -gdwarf-4 -o program program.cpp

在这个命令中,program.cpp是你的C++源代码文件,-gdwarf-4选项用于生成准确的调试信息,-o program选项用于指定生成的可执行文件名为program

推荐的腾讯云相关产品是腾讯云云服务器(CVM),它提供了稳定可靠的云计算资源,适用于各种应用场景。您可以通过以下链接了解更多关于腾讯云云服务器的信息:

腾讯云云服务器产品介绍:https://cloud.tencent.com/product/cvm

相关搜索:C++ typedef和return类型:如何让编译器识别用typedef创建的返回类型?在GDB中,调用名称空间内的C++函数或非调试二进制文件中的类的正确方式是什么?分部类无法识别Windows窗体上的"using customnamespace“或任何附属于非分部类的方法Xcode升级后无法编译C++代码:没有这样的文件或目录在编译flex和bison代码时,G++无法识别我的c++类在C或C++代码中以编程方式为Linux上的gdb设置断点在路径中找不到CLION中的GCC编译器,因此无法编译简单的C++程序无法识别单链表中的内存泄漏(使用Dr. Memory) C++交叉编译用于arm的opencv : c++:错误:无法识别的命令行选项‘-mthumb’;你的意思是‘-mtbm’吗?配置"beta_settings“中存在无法识别或不允许的密钥运行Angular Universal应用程序失败-无法从单独的项目或识别服务编译app.module.tsc++中的交叉编译(作为跨平台应用程序的一部分或作为服务)“”无法识别为angular中的内部或外部命令、可操作程序或批处理文件在Windows10 -pthread上使用VS2019的Linux (Raspbian)中的C/C++线程-无法编译在C++中,我得到了一个我无法理解的编译器错误使用宏编译时使用用户定义的数学函数,或仅使用c++中标准数学库中的函数单独文件中的C++类未编译。已在Class.obj中定义找到一个或多个多个定义的符号如果我的编译器不支持它们,如何在C或C++中添加/减去128位整数?我只想用新值或旧值记录表中的所有列,但触发器无法编译Tidyr在R中的“嵌套”函数无法识别变量并输出:“警告消息:未知或未初始化的列”
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 深入浅出GDB调试器

    但是在实际应用GDB 更常用来调试C和C++程序。虽然说在Linux系统下我们可以借助诸多集成开发工具来完成程序编写和调试,但实际上,调试C/C++程序一定是直接或者间接使用GDB完成。...说起来不好理解,我们举个例子,就用上面给出gdb_test.c文件,我们编译好运行一下,并传递参数 gcc gdb_test.c -o g3 ....但是,我们正常使用gcc命令编译出来可执行文件是无法通过gdb调试,因为这样编译出来可执行文件缺少gdb调试所需要调试信息(比如每一行代码行号、包含程序中所有符号符号表等信息)。...④ 假如直接使用 gdb 命令进入gdb调试器,gdb自己是无法确定要调试哪个可执行文件,即使当前目录只有一个可执行文件也无法自动识别,这时我们可以手动指定目标调试文件。...(读写) (16)catch (gdb)catch enevt 监控某一事件 event 发生,当事件发生时,程序停止 这个 event 可以是下面的情况: ① C++ throw 抛出异常

    14110

    很经典GDB调试命令,包括查看变量,查看内存

    可惜GDB不能使用你在程序中所定义宏。 表达式语法应该是当前所调试语言语法,由于C/C++是一种大众型语言,所以,本文中例子都是关于C/C++。...例如,查看文件f2.c全局变量x值: gdb) p 'f2.c'::x 当然,“::”操作符会和C++发生冲突,GDB能自动识别“::” 是否C++操作符,所以你不必担心在调试C++程序时会出现异常...对付这种情况时,需要在编译程序时关闭编译优化。一般来说,几乎所有的编译器都支持编译优化开关,例如,GNU C/C++编译器GCC,你可以使用“-gstabs”选项来解决这个问题。...四、输出格式 一般来说,GDB会根据变量类型输出变量值。但你也可以自定义GDB输出格式。例如,你想输出一个整数十六进制,或是二进制来查看这个整型变量情况。...set print object 在C++,如果一个对象指针指向其派生类,如果打开这个选项,GDB会自动按照虚方法调用规则显示输出,如果关闭这个选项的话,GDB就不管虚函数表了。

    21.1K71

    linux与g++基本知识「建议收藏」

    GDB调试 gcc、g++、gdb区别 GCC:GNU Compiler Collection(GUN 编译器集合),它可以编译C、C++、JAV、Fortran、Pascal、Object-C、Ada...gcc是GCCGUN C Compiler(C 编译器) g++是GCCGUN C++ Compiler(C++编译器) gdb是是GCCGUN 调试工具 linux和win换行符 windows...底层也是调用gcc和g++来编译代码 二进制包和源码包 Linux 软件包管理大致可分为二进制包、源码包,使用工具也各不相同。...Linux 常见软件包分为两种,分别是源代码包(Source Code)、二进制包(Binary Code),源代码包是没有经过编译包,需要经过 GCC、C++编译器环境编译解压才能运行,二进制包无需编译...test -D 定义宏 # 使用gcc/g++编译时候定义宏 #常用场景 # -DDEBUG 定义DEBUG宏 可能文件又DEBUG宏部分相关信息 用个DDEBUG来选择开去关闭DEBUG

    1.3K50

    【Linux】深度解析与实战应用:GCCG++编译器入门指南

    在Linux系统,gcc和g++是GCC套件中用于编译C和C++程序工具。gcc专门用于C语言程序编译,而g++则专注于C++程序编译。...首先对于一个CC++程序从源代码到可执行文件编译过程通常包括四个步骤:预处理、编译、汇编和链接。...✨【汇编(生成机器可识别代码)】:   汇编阶段将汇编代码转换成机器可以直接识别二进制代码(目标代码)。也就是把编译阶段生成“.s”文件转成为“.o”二进制目标代码。...在编译过程,程序可能会调用标准库其他第三方库函数。这些函数具体实现在库,而编译时生成目标文件仅包含对这些函数引用。链接器(Linker)负责将这些引用与库实际实现关联起来。...在Linux环境下,使用GCC(GNU Compiler Collection)G++(GCCC++编译器)编译程序时,可以选择不同编译模式来优化程序保留调试信息。

    9710

    PHP 源码阅读

    编译(根据生成 Makefile) # 3/ 安装(执行 Makefile install部分) RUN cd ~/php71 && \ ....尝试过CLion和Visual Studio 很多代码都不能进行跳转 需自行下载一个与DockerfilePHP版本相同源码用于阅读 增加扩展(可选) 依赖 下载已经安装PHP按本PHP源码...编译型语言: 可以先把代码转成机器码再执行 脚本型语言: 如PHP是运行时进行解释编译 词法扫描分析: 将源文件转换成token流 语法分析: 从token流生成抽象语法树(AST) 编译过程:...双下划线__开头表明是编译变量 typedef说明 如果要在其他文件使用, 会在头文件最开始定义 如果只在当前文件使用, 那么会在结构体声明时候直接紧随 部分结构体(如zend_string)...字符串为什么不是char *,而是char[1] 关键字查询C struct hack是一种把结构体所有成员分配在同一块内存技术, 利于cpu cache,也是一种可变长数组实现方式 网上有些例子会写成

    21110

    Linux下使用VSCode配置C++调试环境

    配置 要让 VSCode 具备 C++ 调试工能,首先需要安装 MicroSoft 官方 C++ 工具插件,直接在扩展插件搜索 C/C++ 即可找到。...注意,点击 Create a launch.json file 创建新配置文件时,VSCode 主窗口要处在打开某一个 C++ 文件状态下,这样它才能自动识别你是要进行 C++ 项目的编译调试工作。...好在这个插件已经给出了一般配置模板,点击 Add Configuration,VSCode 会询问我们要选择何种调试工具,Linux 上一般都预装了 gdb,所以我们就选 C/C++: (gdb) Launch...program" 字段用来指定要调试二进制可执行文件,"args" 用来指定传给二进制可执件文件输入参数。完成这两项后,就可以开始基本调试了。...不过编译时需要注意是,确保 Makefile 文件 CFLAGS 和 CXXFLAGS 变量包含 -g 参数,如果没有则加上,-g 参数是为了保证编译出来二进制文件包含调试信息(也即俗称 Debug

    7.6K31

    深入浅出C++虚函数vptr与vtable

    首先,每个使用虚函数类(或者从使用虚函数类派生)都有自己虚拟表。该表只是编译器在编译时设置静态数组。虚拟表包含可由类对象调用每个虚函数一个条目。...此表每个条目只是一个函数指针,指向该类可访问最派生函数。 其次,编译器还会添加一个隐藏指向基类指针,我们称之为vptr。vptr在创建类实例时自动设置,以便指向该类虚拟表。.../** * @file vptr1.cpp * @brief C++虚函数vptr和vtable * 编译:g++ -g -o vptr vptr1.cpp -std=c++11 * @author...这里采用gdb调试,在编译时候记得加上-g。...通过gdb vptr进入gdb调试页面,然后输入b Derived::fun1对fun1打断点,然后通过输入r运行程序到断点处,此时我们需要查看调用栈内存地址,通过disassemable fun1

    4.2K30

    C++】基础:C++环境配置与基础语法

    有了g++,我们就可以编译c++程序了,通过以下指令: g++ main.cpp # 默认生成a.out g++ main.cpp -o main # 生成-o后可执行文件 用g++一个个编译程序不太方便...make make构建用到时makefile文件。makefile用于描述软件项目中源代码文件如何编译和链接成可执行文件、库文件其他目标文件,提供了一种便捷且灵活方式来管理和构建项目。...C++关键字不能用于用户自定义标识符。...此外,可以用typedef为一个已有的类型取一个新名字,即typedef type newname,如typedef int int32。 enum是一种派生数据类型,是用户定义一系列常量集合。...逻辑运算符包含与(&&), (||), 非(!)等。 位运算符包含按位与(&),按位(|),异(^),取反(~),二进制左移(>)等。

    15110

    Linux基础——Linux开发工具()_gccg++

    gcc: C语言编译器,只能编译C语言 g++: C++编译器,C/C++都可以编译 gcc和g++在执行编译时候一般有以下四个步骤: 预处理(进行宏替换) 编译(生成汇编) 汇编(生成机器可识别代码...可以发现,我们写代码明明只有几行,但是在test.i,却多出几百行代码,而这些代码就是预处理阶段展开头文件,去注释,宏替换,条件编译等操作而出现。...我们发现文件里面是乱码,也就是二进制文件 注意:我们可以直接使用指令从.c文件.i文件变为.o文件 1.5 链接 在完成预处理,编译,汇编后就到了链接阶段,链接主要任务就是将生成各个...其后缀名一般为.a 动态库与之相反,在编译链接时并没有把库文件代码加入到可执行文件,而是在程序执行时由运行时 链接文件加载库,这样可以节省系统开销。...我们想进入gdb模式,我们可以: 指令:gdb 文件名 我们想退出gdb模式,我们可以: 指令:ctrl + d quit 下面给大家介绍一下常用gdb指令: 调试: rrun:

    15010

    C++为什么要弄出虚表这个东西?

    首先声明一点,虚表并非是C++语言官方标准一部分,只是各家编译器厂商在实现多态时解决方案。...C++编译器实际会帮你生成一个类似上例C语言写法二形式。这也算是C++ zero overhead(零开销)原则一个体现。...仅从对象内存布局来看,只能看到成员变量,看不到成员函数。因为调用哪个函数是编译期间就确定了编译期间只能识别父类desc()。...也就是说在含有虚函数编译期间,编译器会自动给这种类在起始位置追加一个虚表指针,一般称之为:vptr。vptr指向一个虚表,称之为:vtable vtbl,虚表存储了实际函数地址。...使用gdb其他工具可以发现: (gdb) p s $2 = { = {_vptr.Actress = 0x400a70 , height

    51410

    GUN 意思

    但不论是什么软件,都得要进行编译成为二进制档案(binary file)后才能够执行,因此他便开始撰写C语言编译器,那就是现在相当有名GNU C(gcc)!这个点相当重要!...GCC是多种主要编程语言编译整合(叫集成)发布。这些编程语言目前包含C, C++, Objective-C, Objective-C++, Java, Fortran和Ada。...GNUC++编译器(GNU C++ Compiler),也是GNU Compiler Collection一部分; GDB GDB是GNU Project一个调试程序(GNU Debugger...改变你程序变量数据,以便你试验导致你程序bug影响因素,并了解更多其它信息。...GDB可以调试以下编程语言编写程序:Ada、C、C++、Objective-C、Pascal等,这些程序可能执行在相同机器上(本地调试),也可能执行在不同机器(远程调试),GDB可以运行在最爱欢迎

    3.2K20

    CC++生态工具链——gccg++编译器使用指南

    一,关于GCC GCC全称是GNU Compiler Collection,是GNU工具链一种。GCC不仅支持C/C++语言,还支持Fortran/Ada/Java等语言编译。...而g++只把xxx.c和xxx.cpp一律都当作C++语言来编译。 在编译C++文件时候,g++会自动链接一些标准库基础库,而gcc不会。...当正在编译C++代码文件依赖STL标准库时候,为了使用STL,gcc命令需要增加参数–lstdc++。因此,虽然gcc和g++都可以编译C++语言程序,但是使用g++会更方便一些。...值是2 编码配置参数 -fno-exceptions #屏蔽掉C++异常,常用于于嵌入式无法接受异常系统 -fno-rtti #禁用RTTI,常用于嵌入式游戏开发 -fno-asm #不要识别..., 一般和 -I 联合使用,明确限定头文件位置 -nostdin C++ #规定不在g++指定标准路经搜索,但仍在其他路径搜索,.此选项在创建libg++库使用 优化参数 -O0 #不优化

    2.5K30

    linux 编译汇编,linux下汇编教程

    linux下汇编教程 第一部分 Linux下ARM汇编语法尽管在Linux下使用CC++编写程序很方便,但汇编源程序用于系统最基本初始化,如初始化堆栈指针、设置页表、操作 ARM协处理器等。...这些段都有缺省标志(flags),连接器可以识别这些标志。(与armasmAREA相同)。...GNU ARM汇编特殊字符和语法 代码行注释符号: ‘@’ 整行注释符号: ‘#’ 语句分离符号: ‘;’ 直接操作数前缀: ‘#’ ‘$’ 第二部分 GNU编译器和调试工具 一....编译工具 1.编辑工具介绍 GNU提供编译工具包括汇编器as、C编译器gcc、C++编译器g++、连接器ld和二进制转换工具objcopy。...GNU工具开发流程如下:编写C、C++语言汇编源程序,用gccg++生成目标文件,编写连接脚本文件,用连接器生成最终目标文件(elf格式),用二进制转换工具生成可下载二进制代码。

    3.5K31

    国密SSL通信调试技巧

    有多少人开发网页js使用到了chrome和firefox远程调试工具? 为啥不愿意采用单步调试?主要是单步调试需要配置,稍微有点麻烦。...对于嵌入式开发和移动开发来说,通常需要在开发机上交叉编译(C/C++开发),将编译二进制程序下载到设备上运行,一般没有Windows开发那样IDE。...在Linux系统下调试国密SSL通信,准备过程其实非常简单,不涉及交叉编译、gdbserver,只需要稍微掌握几个gdb命令即可。 下面以GmSSL代码为例,说明如何单步调试。...编译带调试符号二进制程序在文章搭建国密SSL开发测试环境说明了如何编译GmSSL,编译出来是release版本,不带调试符号,这样就无法进行单步跟踪。... b 设置断点 r 运行程序 n 单步运行 c 从断点出运行,直到遇到下一个断点结束 p 输出变量值 bt 显示断点处调用栈 还有很多其它命令

    2.7K20

    envoy vscode调试环境搭建

    clion 调试 最开始用 vscode 配合微软 C/C++ 插件查看 envoy 源码,但是跳转代码准确度不高,有些很明确函数跳转也会让从一堆重名函数中选择。...之前在使用 jetbrain 全家桶体验都不错,包括 java idea,gogoland,pythonpycharm,因此搜了一下 c++ 有对应 clion 这个 ide。...网上有网友生成 cmake 工程文件 CMakeLists.txt,参考, 效果也不如意 vscode Mac 本机调试 编译没问题,但是 **打的断点无效,无法进入断点** # 安装依赖工具 brew...bazel 版本也不一样,我们可以直接安装 bazelisk ,一个用于 bazel 多版本管理工具,它可以自动识别项目中 .bazelversion 文件,选取指定版本 bazel 来进行构建(可以自动下载对应版本...# 生成 clangd 配置文件 tools/vscode/refresh\_compdb.sh remote-container 远程调试 原理 将本地代码挂载到一个安装了调试envoy必备工具容器

    2.6K20

    怎样在VSCode调试C++程序

    或许本文是该系列最后一篇文章,可以通过一下文章阅读本系列以往章节 1.Linux编译C++代码g++工具,以及g++常用操作指令 2.Linux下C++命令行编译示例 3.Linux下GDB...调试器常用指令 4.Linux下C++命令行调试实战 5.CMake项目的编译流程 1....关键参数: program: 该配置值指向带调试信息二进制程序。我们最终将编译生成程序放在 build 目录,所以这里可以填写 ${workspaceFolder}/build/a.out。...preLaunchTask: 该参数定义调试器启动之前执行任务。默认配置文件并不包含该参数,我们需要手动添加,用于自动编译变更后 C++ 代码。 4.3....debug 已经完成配置,要注意是 program 配置可执行程序路径要和 CMakeLists.txt 配置文件定义二进制可执行程序 输出路径一致。

    3.7K00

    C编译: 使用gdb调试

    gdb是the GNU Debugger简称。它是一款UNIX平台调试器(debugger),可用于为C, C++, Objective-C, Java, Fortran等程序debug。...在gdb,你可以通过设置断点(break point)来控制程序运行进度,并查看断点时变量和函数调用状况,从而发现可能问题。在许多IDEgdb拥有图形化界面。...我们使用gdb来查看程序运行细节) 程序一个为test.c,其中有主程序main()。mean.c程序定义了mean()函数,并在main()调用。...断点(break point)是程序执行一个位置。在gdb,当程序运行到该位置时,程序会暂停,我们可以查看此时程序状况,比如变量值。...我们可以在程序某一行设置断点,比如: (gdb) break 16 将在test.c第16行设置断点。 你可以查看自己设置断点: (gdb) info break 每个断点有一个识别序号。

    1.2K70
    领券