草庐IT

c++ - gdb 调试远程核心转储

我有一个用C++编写的服务器在我无法直接访问的生产环境中崩溃。崩溃产生了一个巨大的核心转储~34G,我无法在本地复制。我需要分析核心转储但不知道如何在不复制它的情况下完成。我尝试在目标上运行gdbserver但它没有将核心文件作为参数并且似乎只适用于调试从主机运行的远程应用程序。有办法做到这一点吗? 最佳答案 Ineedtoanalyzethecoredumpbutdon'tknowhowitcanbedonewithoutcopyingitover.你不能。您需要将核心转储放到可以运行GDB的位置。Icannotsshtother

c++ - GDB中基于局部变量存在性的流量控制

我正在尝试编写一个GDB脚本(遗留的,而不是Python),它将打印有关局部变量(C或C++结构)成员的信息,但前提是该局部变量存在。像这样的东西:#'magic'shouldbeevaluateto"if'infolocals'hasavariablenamedfoo,then#evaluatetotrue,otherwiseevaluatetofalse.if(magic)printfoo->memberend我知道这有点做作,因为局部变量依赖于堆栈框架(所以我最好让它以框架为条件),但我仍然想知道这些方面是否可行. 最佳答案

c++ - valgrind + gdb 的 Eclipse CDT 设置

如何在Eclipse中调试使用gdb运行的valgrind?我这样启动程序:A航站楼:valgrindvgdb=yes--vgdb-error=0./a.out它可以像这样从另一个终端调试它:航站楼B:gdb./a.outtargetremote|vgdb但我无法让它在Eclipse中工作...因此,我想在Eclipse中以图形方式执行我可以通过终端B中的命令行执行的操作。我尝试了很多方法在Eclipse中设置调试配置,但我无法让它工作。我最接近的是通过“C++附加到应用程序”,其中我根据这篇文章最后加载了一个自定义的.gdbinit:https://www.eclipse.org/f

c++ - 在 XCode 3.xx GDB 中打印 Qt 数据结构(QList、QString 等)

我正在尝试在XCode中调试一些Qt容器,但我从GDB返回的结果没有用:printl1$1=(QSharedPointer>&)@0x102780650:{>>={>>={value=0x1161e47e0},membersofQtSharedPointer::ExternalRefCount>:d=0x1161ace00},}Currentlanguage:auto;currentlyc++(gdb)printstrQuery$2={d=0x1161e2890如何从l1(QList)和strQuery(QString)中获取一些有用的输出?我已经尝试过使用这个.gdbinit,它添加

c++ - GDB:仅当先前的中断在 func2 上时才在 func1 上中断

我有两个函数,func1和func2,每个函数都设置了一个断点。是否可以让GDB在func2断点处停止,前提是前一个断点是func1? 最佳答案 最好的方法是在断点中使用命令。您可以指示GDB在遇到两个断点时执行某些命令(例如,增加计数器)。根据这些变量/标志的计数有条件地停止执行。我在thislink上找到了这个信息.请参阅相同的以获取更多详细信息。这篇文章写得很好,有适当的例子。希望这会有所帮助。 关于c++-GDB:仅当先前的中断在func2上时才在func1上中断,我们在Stac

c++ - 如何使用德语语言环境在 gdb 中设置双变量?

我正在使用gdb调试我的C++程序。由于德语语言环境,我很难设置一个简单的double变量。gdb不接受带小数点的值。使用德语小数点(逗号)输入,gdb会忽略逗号后的所有内容。(gdb)pthis->foodSupply$1=1(gdb)setthis->foodSupply=4.3UngültigeNummer»4.3«.(gdb)pthis->foodSupply$1=1(gdb)setthis->foodSupply=4,3(gdb)pthis->foodSupply$3=4我想我可以通过使用LC_ALL=ENgdb...运行gdb来避免这个问题。但是由于在我的IDE中工作并不那

c++ - 使用 gdb 调试附加进程 - 如何跳出循环

我正在调试看起来像这样的代码:while(true){//dosomething...size_ti=foo();//我想在foo()函数调用处中断,调用它几次,然后完全跳出while循环(假设我们保证标志将被设置-这样我们就可以跳出循环。如何完全跳出循环?finish简单地运行到下一次迭代。我想要做的是退出当前的“代码块”(在本例中为while循环) 最佳答案 您需要advance命令,它采用与break命令相同的参数。以您的代码为例(但添加了行号):10while(true){11//dosomething...12size_t

c++ - 如何在 gdb 中执行 `print`/evaluate c++ 模板函数

我想知道是否可以使用gdbprint命令评估C++模板函数的结果。在下面的代码中有一个简单的id功能,我试着printid(x)的结果,但就好像id或id从未存在过。我使用的代码如下,使用g++-std=c++11-gtest7.cpp编译:templateTid(Tx){returnx;}intmain(){inti=0;i=i+1;}在GDB中,我试图print如下:Breakpoint1,main()attest7.cpp:66i=i+1;(gdb)printi$1=0(gdb)printid(i)Nosymbol"id"incurrentcontext.(gdb)printid

c++ - <优化出来> 在 ubuntu 中的 gdb

在ubuntu中使用gdb进行调试时,在断点后我尝试打印一些东西。它显示.在make文件中,我更改了-O2至-O0,即使这样也会出现同样的错误。如何消除此错误并打印优化后的输出值? 最佳答案 可怕的“已优化”消息意味着编译器决定它无法告诉调试器变量所在的位置。它可能完全消失,或者它可能太复杂而无法以某种方式表示(也许是为了编译器代码内部的完整性)。您可以使用一些技巧来避免出现此消息。首先,确保启用-fvar-tracking。如果您使用的是DWARF(旁注:永远不要使用stabs),那么在优化时它应该是默认值,但确定一下也无妨。您可

c++ - 警告 : GDB: Failed to set controlling terminal: Operation not permitted

当我尝试使用带有NetbeansIDE的gdb调试C/C++程序时,出现此错误(问题的标题)。有谁知道这意味着什么,以及如何消除警告?尽管有警告,我仍然可以调试,但我仍然想让警告消失。相关详情:操作系统:Ubuntu9.10gdb:7.0-ubuntuNetbeans:6.8.1 最佳答案 项目>属性>运行>控制台类型>输出窗口 关于c++-警告:GDB:Failedtosetcontrollingterminal:Operationnotpermitted,我们在StackOverfl