问题标签 [gdb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
11392 浏览

debugging - 当我执行 ctrl c 时调试分段错误

取消程序时出现分段错误。我正在使用 gdb 进行调试,问题是当我在调试时按 Ctrl-C 时,gdb 不会取消程序并执行它应该做的就是停止它。

我想要的是执行 Ctrl-C 并且不允许 gdb 停止它。有没有办法做到这一点?还有其他调试建议吗?我不能使用 printf ,因为我真的不清楚问题出在哪里。

0 投票
2 回答
5124 浏览

c++ - 在 gdb 中跟踪对类实例/内存范围的写访问

我正在尝试调试我在 C++ 大学课程中编写的小型操作系统。在运行时,我的某个对象之一正在损坏。这似乎是由于意外写入错误的内存地址而发生的。由于我无法通过纯粹查看代码来找到发生这种情况的地方,因此我需要另一种方法。

由于这是一个操作系统,我无法将 valgrind 之类的工具附加到它,但我可以在附加了 gdb 的模拟器(bochs/qemu)中运行它。

gdb 中有没有办法跟踪对类实例或更一般的特定内存范围的写访问?我想在写访问发生时立即中断,这样我就可以验证这是否有效。

0 投票
2 回答
1312 浏览

gdb - 使用 GDB 调试 Bison 生成的代码

我正在尝试进入我的 yyparse 函数,该函数在 Bison 生成的代码中定义,但我从 GDB 收到一条消息说

Reading file "foo.tab.c"...No such file or directory.

Bison 生成的文件名为 foo.cc。它为什么要寻找foo.tab.c,而不是?

0 投票
2 回答
2090 浏览

gdb - 如何在 gdb/ada 中进行字符串连接

根据手册,gdb中没有实现字符串连接。但是我需要它,那么有没有办法实现这一点,也许使用数组函数?

0 投票
5 回答
48150 浏览

assembly - 在 gdb 中切换到汇编

在 gdb 中调试 C 或 C++ 程序时,有什么方法可以切换到汇编?(假设所有源文件及其对应的汇编文件都可用)

0 投票
11 回答
6469 浏览

c++ - GCC 调试器堆栈跟踪显示错误的文件名和行号

我正在尝试将一个相当大的 C++ 项目移植到在 Mac OS X 上使用 g++ 4.0。我的项目编译没有错误,但我无法让 GDB 正常工作。当我通过在 GDB 命令行上键入“bt”查看堆栈时,显示的所有文件名和行号都是错误的。

例如,根据 GDB 堆栈跟踪,我的main()函数应该在 Mac OS X SDK 的 stdexcept 中,这没有任何意义。

是什么导致 GDB 出现如此严重的故障?我已经检查了代码中的 #line 和 #file 语句,并确保代码只有 unix 行结尾。我还清理并重建了该项目。我也尝试过调试一个 Hello World 项目,但没有遇到同样的问题。

问题是否与我正在链接的第三方库之一以及它们的编译方式有关?还是完全不同的东西?

以下是对Xcode执行的两个示例gcc性调用。AFAIK 我项目中的所有 cpp 文件都使用相同的参数进行编译和链接。ld

/Developer/usr/bin/gcc-4.0 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fpascal-strings -fasm-blocks -O0 -fpermissive -Wreturn-type -Wunused-variable -DNO_BASS_SOUND -D_DEBUG -DXCODE -D__WXMAC__ -isysroot /Developer/SDKs/MacOSX10.5.sdk -mfix-and-continue -fvisibility-inlines-hidden -mmacosx-version-min=10.4 -gdwarf-2 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D__WXDEBUG__ -D__WXMAC__ -c "/Users/adriangrigore/Documents/Gemsweeper Mac/TSDLGameBase.cpp" -o "/Users/adriangrigore/Documents/Gemsweeper Mac/build/Gemsweeper Mac.build/Debug/Gemsweeper Mac.build/Objects-normal/ i386/TSDLGameBase.o"

/Developer/usr/bin/g++-4.0 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk "-L/Users/adrianrigore/Documents/Gemsweeper Mac/build/Debug" -L/Developer/SDKs/MacOSX10 .5.sdk/usr/local/lib -L/opt/local/lib "-F/Users/adrianrigigore/Documents/Gemsweeper Mac/build/Debug" -F/Users/adrianrigore/Library/Frameworks -F/Developer/ SDKs/MacOSX10.5.sdk/Library/Frameworks -filelist "/Users/adrianrigore/Documents/Gemsweeper Mac/build/Gemsweeper Mac.build/Debug/Gemsweeper Mac.build/Objects-normal/i386/Gemsweeper Mac.LinkFileList" - mmacosx-version-min=10.4 /opt/local/lib/libboost_program_options-mt.a /opt/local/lib/libboost_filesystem-mt.a /opt/local/lib/libboost_serialization-mt.a /opt/local/lib/ libboost_system-mt.a /opt/local/lib/libboost_thread-mt.a "/Users/adriangrigore/Documents/Gemsweeper Mac/3rd party/FreeImage/Dist/libfreeimage.a" "/Users/adriangrigore/Documents/Gemsweeper Mac/3rd party/cpuinfo-1.0/libcpuinfo.a" -L/usr/local/ lib -framework IOKit -framework Carbon -framework Cocoa -framework System -framework QuickTime -framework OpenGL -framework AGL -lwx_macd_richtext-2.8 -lwx_macd_aui-2.8 -lwx_macd_xrc-2.8 -lwx_macd_qa-2.8 -lwx_macd_html-2.8 -lwx_macd_adv-2.8 -lwx_macd -lwx_base_carbond_xml-2.8 -lwx_base_carbond_net-2.8 -lwx_base_carbond-2.8 -framework SDL -framework Cocoa -o "/Users/adriangrigore/Documents/Gemsweeper Mac/build/Debug/Gemsweeper Mac.app/Contents/MacOS/Gemsweeper Mac"-L/usr/local/lib -framework IOKit -framework Carbon -framework Cocoa -framework System -framework QuickTime -framework OpenGL -framework AGL -lwx_macd_richtext-2.8 -lwx_macd_aui-2.8 -lwx_macd_xrc-2.8 -lwx_macd_qa-2.8 -lwx_macd_html-2.8 - lwx_macd_adv-2.8 -lwx_macd_core-2.8 -lwx_base_carbond_xml-2.8 -lwx_base_carbond_net-2.8 -lwx_base_carbond-2.8 -framework SDL -framework Cocoa -o "/Users/adriangrigore/Documents/Gemsweeper Mac/build/Debug/Gemsweeper Mac.app/Contents/MacOS /Gemsweeper Mac"-L/usr/local/lib -framework IOKit -framework Carbon -framework Cocoa -framework System -framework QuickTime -framework OpenGL -framework AGL -lwx_macd_richtext-2.8 -lwx_macd_aui-2.8 -lwx_macd_xrc-2.8 -lwx_macd_qa-2.8 -lwx_macd_html-2.8 - lwx_macd_adv-2.8 -lwx_macd_core-2.8 -lwx_base_carbond_xml-2.8 -lwx_base_carbond_net-2.8 -lwx_base_carbond-2.8 -framework SDL -framework Cocoa -o "/Users/adriangrigore/Documents/Gemsweeper Mac/build/Debug/Gemsweeper Mac.app/Contents/MacOS /Gemsweeper Mac"8 -framework SDL -framework Cocoa -o "/Users/adriangrigore/Documents/Gemsweeper Mac/build/Debug/Gemsweeper Mac.app/Contents/MacOS/Gemsweeper Mac"8 -framework SDL -framework Cocoa -o "/Users/adriangrigore/Documents/Gemsweeper Mac/build/Debug/Gemsweeper Mac.app/Contents/MacOS/Gemsweeper Mac"

请注意,我已经在这里问过关于 Xcode 调试器的类似问题,但我正在重新发布,因为我刚刚了解到这实际上不是 Xcode 的错,而是 GCC / ld / GDB 的问题。

编辑:我的项目使用以下第三方库:SDLBoostwxWidgets。我不确定这对这个问题是否重要,但我只是想提一下以防万一。

我已经尝试编译一个 Xcode SDL 项目模板并且没有遇到同样的问题,所以这一定是由于我的项目中有一些特殊的东西。

第二次编辑:正如我刚刚发现的那样,我在使用字符串“这是自动生成的”搜索文件时犯了一个错误。我刚刚发现了几十个具有相同字符串的文件,它们都属于我正在使用的第三方库之一FreeImage 。所以,这个问题似乎与 FreeImage 有关,但我仍然不确定如何继续。

0 投票
2 回答
2013 浏览

gdb - 大型二进制文件的制表符完成中断

如果我在调试大型二进制文件时不小心启动了选项卡完成,gdb 将冻结一段时间扫描符号表(在我的情况下最多 1 分钟)。所以我必须等到整个符号表被扫描。有什么办法可以在 gdb 中中断这个过程吗?

0 投票
10 回答
5869 浏览

c++ - 如何找到我的程序的 main(...) 函数?

我目前正在将一个包含数百个代码文件和依赖项的项目移植到几个第三方库到 Mac Os 上。我终于达到了程序编译没有警告或错误的地步,但它似乎没有执行我自己的 main 函数。

相反,它似乎执行了一些其他似乎属于第三方的主要功能。此函数将一些诊断数据写入控制台,然后退出:

我无法使用调试器找出这个 main 函数所在的位置,因为虽然堆栈跟踪似乎有效,但 gdb 没有向我显示每个堆栈条目的正确行号和文件名(有关详细信息,请参阅这个未解决的问题)。

搜索需要几分钟才能完成,但没有返回任何结果。

我的项目在其他库中使用 SDL,但我获得了 SDL_Main() 和潜在问题的奖励,并且在完美运行的 SDL 项目模板之上构建了我的项目。所以我很确定我自己的主要功能是有效的。

你知道可能出了什么问题吗?我目前对如何查找和删除流氓主要功能一无所知。

谢谢,

阿德里安

编辑:正如我刚刚发现的那样,我在使用字符串“这是自动生成的”搜索文件文件时犯了一个错误。我刚刚发现了几十个具有相同字符串的文件,它们都属于我正在使用的第三方库之一 FreeImage。因此,问题似乎与 FreeImage 有关,但我仍然不确定如何继续,因为我已将 Freeimage 编译为包含 MacOs makefile 的库并且仅包含该库。我会尝试重建一个更新版本的 FreeImage 并查看它是否解决了我的问题。

0 投票
3 回答
5704 浏览

debugging - Solaris GDB:如何暂停执行?

我正在使用 GDB 在 Solaris 10 x86 上调试封闭源程序。

我将 gdb 附加到程序并继续执行,但是当我想稍后暂停执行以检查我无法检查的一些内存时。当我按下 CTRL-C 时,它只打印 ^C 而不是暂停程序并将我放到 (gdb) 提示符下。

如何返回 (gdb) 提示?我是不是做错了什么,或者我该如何让它发挥作用。

0 投票
1 回答
296 浏览

unix - 如何将参数(即二进制文件名称)传递给 Emacs gdb 命令?

现在,我已将 F5 设置为在 emacs 中为我启动 gdb:

(全局设置键 [f5] 'gdb)

这将切换到迷你缓冲区,然后我输入一个可执行文件的路径......我想找到一种方法来绕过这个路径输入......

我编写了一个可执行文件,它查看 Makefile,解析它并找出可执行文件的完整路径并将其打印到标准输出......是否可以从我的 .emacs 调用它......然后以某种方式将输出传递给gdb 命令?