草庐IT

c++ - 让gdb自动从核心文件加载二进制文件

我能否让gdb自动加载核心文件中指定的二进制文件?给定一个核心文件我现在通常这样做:gdb-ccorefileGNUgdb6.8...Corewasgeneratedby`/path/to/binary'然后我复制粘贴并运行:gdb-ccorefile/path/to/binary这似乎是一个不必要的两步过程,但我没有看到基于手册页的明显方法。我错过了什么吗? 最佳答案 你可以编写脚本吗?#!/bin/bashgdb"`file"$1"|awk-F\''{print$2}'`""$1"

c++ - 如何在 C++ 程序中查看 gdb 中的 vtable?

我的一个C++程序中有一个有趣的问题。显然,我的一个类的vtable在程序执行期间被/变得困惑了。在gdbsession中,我发现如果我直接调用对象的方法它会成功,但如果我使用指针或引用,我最终会进入一个完全不相关的类的析构函数,该类不会很快被实例化。没有this-指针当然会改变。假设我的观察是正确的,我如何在gdb中查看对象的vtable?我在Linux上使用gcc,我的gdb版本是GNUgdb(Ubuntu/Linaro7.3-0ubuntu2)7.3-2011.08。 最佳答案 您可以使用gcc的-fdump-class-hi

c++ - GDB 不显示堆栈的十六进制值

我试图让GDB显示堆栈的十六进制值,所以我使用命令x/48b$esp,这是我在Internet上看到的一个命令,应该显示堆栈上从堆栈指针指向的位置开始的48个字节的十六进制值。但是,当我执行此命令时,我得到整数值(有些是负值)。示例如下:(gdb)x/48b$esp0xbffff200:40-14-1-6524-114480xbffff208:12300000000xbffff210:16000-3-1121700xbffff218:-1864270-1-1-1-10xbffff220:884019045-91700xbffff228:3838-64-14-1-65-64-14我以前用

c++ - 如何在 gdb 中为函数的所有调用设置断点?

我有一个第三方库函数调用分散在我的可执行文件的很多地方。我的可执行文件是使用调试符号构建的,但第三方库没有调试符号,因此我无法在函数上放置断点。我想在调用库函数时放置一个断点,以检查调用堆栈。如何在我的可执行文件中对库函数调用的所有调用设置断点。 最佳答案 我认为唯一的方法是:在您的代码中找到此函数的任何调用;在该行创建一个断点;运行调试器并停在那里;在gdb中写入nexti得到第一个函数指令;获取指向该函数开头的当前eip;在eip指向的地址新建断点; 关于c++-如何在gdb中为函数

c++ - C++ eclipse 调试器出现以下错误。 'Launching program name' 遇到...启动命令 : gdb --version 时出错

我一直在解决调试器问题,但现在它变得太烦人了。我正在处理更复杂的程序,如果我不能调试我的程序,我就无处可去。有没有其他人能够在eclipse中解决这个问题?它适用于java,但不适用于我来自minGW的C++插件C++eclipse调试器出现以下错误。“启动程序名称”遇到问题。启动命令时出错:gdb--version 最佳答案 假设您使用的是Windows并安装了MinGW,您只需在MinGWbin文件夹中找到gdb可执行文件。这可以在Eclipse的“调试器”配置中的“主”选项卡上完成:

c++ - 在 gdb 中显示参数包的值

这个问题在这里已经有了答案:Inspecttemplateparameterpackingdb(1个回答)关闭6年前。如何在gdb的可变参数函数中查看参数包的值?示例代码(VariadicDebug.cpp):templateintDo(inta,Ts...ts){//Addbreakpointhere.acanbeseenusing'printa'buthowtoshowts???returna;}intmain(intargc,char**argv){returnDo(0,"Helloworld!",88.9);}编译g++--std=c++11-O0-gVariadicDebug

c++ - gdb 错误消息 : DW_OP_reg, DW_OP_piece 和 DW_OP_bit_piece

我正在调试别人的Qt程序并遇到以下我不理解的错误消息:DWARF-2expressionerror:DW_OP_regoperationsmustbeusedeitheraloneorinconjuctionwithDW_OP_pieceorDW_OP_bit_piece.我不确定这意味着什么,Google也帮不上什么忙。这里是上下文-sLocation是一个QString,它在几行之前声明过。然而,它是从内联函数创建的,所以我不确定它的值(value),并试图在附加到之前进行检查:(gdb)printqstringsuffix(QString)0xffffbd80:"sorted"(

c++ - 在 gdb 调试器中打印 __m128 数据类型的值

有没有办法直接在GDB中打印数据类型为__m128(用于IntelSSE内在函数)的变量值?命令print$myVariable适用于int和float但不适用于__m128。 最佳答案 这很痛苦,但我通常这样做:gdb>p*(float*)&v@4这是假设v是__m128。您可以应用相同的原则,例如unsignedchar的__m128ivector:gdb>p/x*(unsignedchar*)&v@16 关于c++-在gdb调试器中打印__m128数据类型的值,我们在StackOv

c++ - 在 gdb 中检查模板参数包

我正在尝试调试以下简单程序:#includetemplatevoidprintAll(Args&&...args){usingswallow=int[];swallow{0,(std::cout使用gcc4.9.2编译:g++-std=c++11-g-O0foo.cxx然后使用gdb7.9进行调试:gdba.out(gdb)breakfoo.cxx:5Breakpoint1at0x400884:filefoo.cxx,line5.(gdb)runStartingprogram:/..[snip]../a.outBreakpoint1,printAll(int&&,charconst(&

c++ - GDB 错误 "cp_search_static_and_baseclasses"

我正在使用STM32Workbench(基于Eclipse的IDE),我有一个工作区,其中包含几个C++静态库和2个C++应用程序,所有这些都是使用STM32F4MCUC++应用程序或静态库模板制作的。我的第一个申请很顺利,我开始了第二个申请。该项目模板添加了一个带有无限循环的main.c,与语言无关。如果我尝试调试main.c一切正常,但如果我将文件名更改为main.cpp(我需要它以在内部使用C++类)GDB在调试前停止并出现错误:/home/build/work/GCC-5-0-build/src/gdb/gdb/cp-namespace.c:343:internal-error