草庐IT

c++ - 在 GDB 中打印子类成员

GDB中是否有一个设置可以自动从基类指针打印一个(C++)子类的所有成员,或者我是否总是必须在取消引用之前将其强制转换为子类指针。那是我不总是想做的:p*(SubClass*)baseClassInstance 最佳答案 setprintobjectshowprintobjectChoosewhethertoprintderived(actual)ordeclaredtypesofobjects.我想setprintobject是您所需要的,但它仅适用于多态类型。http://www.delorie.com/gnu/docs/gdb

c++ - 为什么 Eclipse 不使用 GDB 的 pretty-print ?

我在Ubuntu14.04和GDB7.7.1上使用Eclipse4.4.2。我正在尝试在Eclipse调试器中检查一些C++标准库容器的内容。到目前为止我已经尝试过:按照说明进行操作here,我运行了命令svncosvn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python将其复制到/home/myusername/prettyprint。然后我将此文本复制到我的.gdbinit中:pythonimportsyssys.path.insert(0,'/home/myusername/prettyprint/python')fromlibstdc

c++ - 从gdb中模板类的成员函数打印静态变量

我有一个简单的模板类:namespacetest{template>classDB{public:staticDB&instance(){staticDB_instance;return_instance;}private:DB(){};DB(DBconst&){};voidoperator=(DBconst&){};Container_db_internal;};}当我在gdb中调试时,我想查看_db_internal容器,但不知道如何访问它。我试着用gdb写:p'test::DB>::instance()::_instance'._db_internal它给了我:Nosymbol.

c++ - 使枚举调试器感知的宏?

我正在使用QtCreator4.7.0和Qt5.9.2LTS。有没有一种简单的方法可以让调试器(GDB或CDB)知道您自己的enum类型,而无需创建自定义调试助手(例如,使用像Q_MAKE_DEBUGGING_AWARE这样的宏?到目前为止,对于那些自定义枚举值,只显示“xyz类型的值”。 最佳答案 它在QtCreator4.7.0之前运行良好。我发现取消选中Tools>Options>Debugger>CDB>UsePythondumper解决了这个问题,我的所有枚举都在所有调试器输出窗口中正确显示。

c++ - GDB 无法访问 mmap() 的内核分配内存?

我遇到了GDB问题和在内核空间中分配的一些缓冲区。缓冲区由一个内核模块分配,该模块应该分配连续的内存块,然后通过mmap()调用将内存映射到用户空间。然而,GDB似乎无法随时访问这些block。例如,在GDB中遇到断点后:(gdb)x/10xb0x4567e0000x4567e000:Cannotaccessmemoryataddress0x4567e000但是,查看/proc//smaps中应用程序当前映射的内存区域显示:4567e000-456d3000rwxs8913f00000:0d883/dev/cmemSize:340kBRss:340kBPss:0kBShared_Cle

c++ - 使用核心转储从崩溃中恢复

一个C++程序在FreeBSD6.2上崩溃了,操作系统好心地创建了一个核心转储。是否可以截断一些堆栈帧,重置指令指针并重新启动gdb中的进程,以及如何? 最佳答案 Isitpossibletoamputatesomestackframes,resettheinstructionpointerandrestarttheprocessingdb?我假设您的意思是:更改进程状态,并将其设置为再次开始执行(就好像它从来没有崩溃过一样)。没有。一方面,您建议GDB(如果它神奇地具有此功能)如何处理您的文件描述符(当您的进程终止时内核自动关闭)

c++ - 使用 -g 选项编译但 "Single stepping until exit from function main, which has no line number information"

我在使用gdb时遇到了一些问题。这是我在一个名为main.cpp的文件中的代码#includevoidmyfunc();intmain(){charmsg[]="HelloWorld!";myfunc();std::cout我使用这个命令来编译这段代码:g++-g-Wallmain.cpp-ofoo接下来,我使用了gdb:$gdbfoo(gdb)startTemporarybreakpoint1at0x80487c3Startingprogram:/home/laptop/workspace/fooTemporarybreakpoint1,0x080487c3inmain()(gdb)

c++ - 如何通过 gdb 调试 nodejs 插件

标题我正在编写一个Node.JsC++插件,当我尝试按照我在互联网上搜索的方式调试我的C++添加时,它根本无法工作。我从网上得到的是gdbNode设置参数app.js运行我明白了/usr/local/bin/node":不是可执行格式:无法识别文件格式在类型文件/usr/local/bin/node之后我明白了/usr/local/bin/node:具有2种架构的Mach-O通用二进制文件/usr/local/bin/node(forarchitecturei386):Mach-Oexecutablei386/usr/local/bin/node(forarchitecturex86_

c++ - 无法在 gdb 中打印全局对象

我有这个简单的C++代码:#includeusingnamespacestd;vectorq;intmain(){q.push_back("test1");q.push_back("test2");cout当我使用gdb打印变量q时,出现以下错误:Nosymbol"q"incurrentcontext.我像这样使用g++编译我的程序:g++-ga.cpp这是我的gdb命令:gdba.outGNUgdb(GDB)7.12Copyright(C)2016FreeSoftwareFoundation,Inc.LicenseGPLv3+:GNUGPLversion3orlaterThisisf

【Linux】Linux开发工具(yum、gdb、git)详解

一、软件包管理器yum1、什么是软件包在Linux下安装软件,通常的办法是下载到程序的源代码,并进行编译,得到可执行程序。但这样太麻烦了,于是有些人把一些常用的软件提前编译好,做成软件包(可以理解成在Windows上的安装程序)放在一个服务器上,通过包管理器可以很方便的获取到这个编译好的软件包,直接进行安装。软件包和软件包管理器,就好比"App"和“应用商店” 这样的关系。yum(YellowdogUpdater,Modified)是Linux下非常常用的一种包管理器。主要应用在Fedora,RedHat,Centos等发行版上。Linux下安装软件的方式:源代码安装。rpm包安装。yum工具