草庐IT

c++ - Mac OS X 上的 Emacs 24 和 GDB 6.3

过去几天我一直在OSXLion上试用Emacs24(预测试24.0.95.1),但在使用新的gdb/MI界面时遇到了一些问题。使用Xcode附带的GDB6.3,但gdb/MI接口(interface)似乎根本没有加载。它似乎试图启动GDBGUD模式,但实际上没有任何命令起作用。我还尝试通过Homebrew安装GDB-7.4。这让我部分在那里。gdb-many-windows界面出现了,但gdb提示始终没有出现。Emacs只是坐在那里吃掉100%的CPU,但并没有变得无响应。我仍然可以打开文件等。我对GDB无能为力。有没有其他人遇到过类似的问题?您是否能够解决它们?如果可以,如何解决?编

c++ - 如何在 gdb 中打印 std::map 值

我有一个std::map继续;我想在gdb中查看cont["some_key"]。当我尝试时p继续[“some_ket”]我收到此消息:您尝试传递给operator[]的参数之一无法转换为函数所需的参数。我正在使用GNUgdbRedHatLinux(6.3.0.0-1.162.el4rh)。谢谢 最佳答案 最新的gdb内置了python支持,因此可以轻松编写一个函数来打印任何STL结构的内容。但是,您必须学习API并编写脚本。幸运的是gcc4.5将附带所需的python脚本,以使gdb智能地处理STL数据结构。编辑:您不必等待GCC

c++ - 在 gdb 中打印整个链表?

我有一个链表structnode{data_tdata;node_t*next;};typedefstruct{node_t*head;node_t*foot;node_t*curr;//foriteratorunsignedintsize;}list_t;有了这个结构,让我们说我定义了一个列表list_t*myList;如何使用GDB打印整个链表? 最佳答案 这应该可以工作(但未经测试):defineplistsetvar$n=$arg0->headwhile$nprintf"%d",$n->datasetvar$n=$n->ne

c++ - 如何为 GDB 加载额外的库?

我正在尝试调试CUDA程序,但是当我像这样启动gdb时:$gdb-i=mi$r我明白了:/home/wvxvw/Projects/cuda/exercise-1-udacity/cs344/HW2/hw:errorwhileloadingsharedlibraries:libcudart.so.5.0:cannotopensharedobjectfile:NosuchfileordirectoryProcessgdb-inferiorkilled(为便于阅读而格式化)(我正在使用M-xgdb运行gdb)如果这很重要,那么CUDA库在.bashrcexportPATH="/usr/loc

c++ - 在 gdb 中显示取消引用的 STL 迭代器

我有一个映射元素的迭代器,我希望gdb向我显示该迭代器的“第一个”和“第二个”元素的值。例如:std::mapaMap;...fillmap...std::map::const_iteratorp=aMap.begin();我可以在代码中使用p.first和p.second,但在gdb中看不到它们。对于它的值(value),在dbx中可以执行“printp.node.second_”之类的操作,但我可以在gbd中找到类似的内容。我完全愿意有一个函数来传递对象类型,但我也无法让它工作。有什么想法吗?谢谢! 最佳答案 这是我的做法:Th

c++ - 远程 GDB 调试

我刚刚花了一整天的时间试图找到一种方法来从QtCreator启用GDB调试。或eclipse。我了解到启动目标应用程序基本上有两种方法:使用ssh(ssh主机gdb)使用gdbserver我能够使用这两种方法远程启动gdb并启动应用程序。但是,GDB从不响应IDE中设置的任何断点。我也不能暂停应用程序来检查程序状态。在QtCreator中,我只是得到一个模糊的堆栈跟踪(实际上我可能一直在查看ssh或gdb的跟踪......)。谁能帮我开始?进展!我发现QtCreator2.0有一个名为“附加和调试远程应用程序”的功能。它基于gdbserver。好消息是它在IDE的断点处停止。但是,有两

c++ - 为什么我在检查核心转储时进入 gdb "Cannot access memory at address 0x..."?

我在分析核心转储时尝试打印以下行时收到此消息。(gdb)p/x*($esi)Cannotaccessmemoryataddress0xe6d3a030我提到%esi(0xe6d3a030)指向的地址应该指向一些有效的分配数据。(当我自己运行这个程序并按照相同的指令中断时,这个打印有一些有意义的信息)造成这种情况的可能原因是什么?我是否遗漏了核心转储中的一些信息?如果是,我缺少什么信息?核心转储不应该包含所有已分配内存的快照吗?编辑:当我在加载核心转储时在gdb“维护信息部分”命令中使用时,我得到下面显示的信息。我可以看到地址0xe6d3a030在0xe6d00000->0xe6dfb0

c++ - GDB - 如何打破 "something is written to cout"?

我想设置一个断点,每次通过cout流将某些内容写入stdout时触发,但我无法找到可能的位置断点。如何在gdb中执行此操作? 最佳答案 这是一种依赖于平台的方式。如果您在x86_64上并使用gcc构建写入std::cout会导致调用fwrite。回溯看起来像这样:#00x0000003c2fc622a0infwrite()from/lib64/libc.so.6#10x0000003c43289655instd::ostreambuf_iterator>std::num_put>>::_M_insert_int(std::ostre

c++ - 使用 QtCreator 设置 GDB

我有一个使用OpenCV和cmake的简单项目,并且有两个源文件只有segmentation.h和segmentation.cpp。这是cmake文件:project(Segment)cmake_minimum_required(VERSION2.8)SET(CMAKE_BUILD_TYPEDebug)SET(CMAKE_VERBOSE_MAKEFILEtrue)if(CMAKE_COMPILER_IS_GNUCXX)message(STATUS"GCCdetected,addingcompileflags")set(CMAKE_CXX_FLAGS"${CMAKE_CXX_FLAGS}

c++ - GDB 回溯消息 "0x0000000000000000 in ?? ()"是什么意思?

当它给出带有以下输出的回溯时是什么意思?#00x00000008009c991cinpthread_testcancel()from/lib/libpthread.so.2#10x00000008009b8120insigaction()from/lib/libpthread.so.2#20x00000008009c211ainpthread_mutexattr_init()from/lib/libpthread.so.2#30x0000000000000000in??()程序因标准信号11、段错误而崩溃。我的应用程序是一个在FreeBSD6.3上运行的多线程FastCGIC++程序,