首页
学习
活动
专区
工具
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

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

很经典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就不管虚函数表了。

20.5K71

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

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,也是一种可变长数组实现方式 网上有些例子会写成

18610

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.5K31

深入浅出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

4K30

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是一种派生数据类型,是用户定义一系列常量集合。...逻辑运算符包含与(&&), (||), 非(!)等。 位运算符包含按位与(&),按位(|),异(^),取反(~),二进制左移(>)等。

7310

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:

13710

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

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

49510

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.1K20

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.3K30

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.4K31

国密SSL通信调试技巧

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

2.6K20

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.5K20

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.1K70

怎样在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.5K00

C++雾中风景番外篇3:GDB与Valgrind ,调试代码内存工具

1.利用 GDB 调试 CoreDump CoreDump时一个二进制文件,进程发生错误崩溃时,内核会产生一个瞬时快照,记录该进程内存、运行堆栈状态等信息保存在core文件之中。...图片.png 利用 GDB 调试 core 文件 调试 core 文件需要利用原生编译二进制文件调试。...这里有一点需要注意,如果编译 C++文件之时没有加-g编译选项,core 文件调试内容会不够完整。笔者这里建议开启对应编译选项,这会导致对应二进制文件变大,编译时间变长。...(生产环境可以考虑关闭)使用gdb 二进制文件 core 文件打开 core 文件。 ? 利用 gdb 调试 core 文件 core 文件列出了两个线程信息。...3.小结 本文介绍了亡羊补牢工具 GDB,也简介了未雨绸缪Valgrind 。通过上述工具对C++程序更加深入分析。

2.1K31
领券