草庐IT

c - gdb 便利变量 strcat

我想使用方便的变量来收集事物列表。我找不到任何关于便利变量的字符串连接的信息。所以我尝试了一些东西。检查一下:(gdb)set$foo="foo"(gdb)p$foo$45=0x84c7fd8"foo"(gdb)callstrcat($foo,"bar")$46=139231192(gdb)p$foo$47=0x84c7fd8"foobar"好吧,所以我更努力地让它崩溃了:(gdb)set$foo="foo"(gdb)set$bar="blue"(gdb)p$foo$48=0x85d9100"foo"(gdb)p$bar$49=0x83cd1e8"blue"(gdb)callmemse

c - gdb 远程调试。实现一个伪造的 gdbserver stub 。经过多次请求和响应,得到警告 :invalid remote reply

为了项目的需要,我写了一个简单的javasocket程序来实现一个“假的”gdbserverstub。因此,支持最少数量的gdbRSP命令:g、G、m、M、c和s。对于其他命令,只需响应“$#00”。根据gdb的手册,这会告诉gdb“服务器”不支持其他命令。我使用EclipseCDT来帮助我进行调试。在调试配置中,我选择了c/c++远程应用程序,并在localhost:10000上使用TCP设置调试器连接,我的java程序将在此处进行监听。首先,gdb发送qSupported、Hg0、qTStatus、?和qC等命令。对所有命令的响应都是“$#00”,告诉gdb“服务器”不支持这些命令

c - gdb调试(带断点): Gtk-WARNING **: Invalid text buffer iterator

我如何使用gdb调试(并到达某个断点)我的错误程序(使用GTK3)显示:(monimelt:161):Gtk-WARNING**:Invalidtextbufferiterator:eithertheiteratorisuninitialized,orthecharacters/pixbufs/widgetsinthebufferhavebeenmodifiedsincetheiteratorwascreated.Youmustusemarks,characternumbers,orlinenumberstopreserveapositionacrossbuffermodificati

linux - GDB 在事后分析中显示了错误的线程

我遇到了GDB的奇怪行为。当运行内核的事后分析时,从c++中的高度多线程应用程序转储,调试器命令btwherethreadinfo永远不要告诉我程序实际崩溃的线程。它一直向我显示线程号1。因为我习惯于在其他系统上看到它,所以我很好奇这是否是GDB中的错误,或者它们是否以某种方式改变了行为。谁能指出我的解决方案,搜索75个线程是PITA,只是为了找出调试器已经知道的东西。顺便说一句,我在DebianSqueeze(6.0.1)上,GDB的版本是7.0.1-debian,系统是x86,完全是32位的。在我较旧的Debian(5.x)安装中,调试一个由完全相同的源转储的核心,为我提供了正确线

c - GDB调试中的问题

我用GDB调试一个C程序,但是我发现GDB执行了一些代码两次。例如,....stream_t*s=stream_CommonNew(VLC_OBJECT(p_access));stream_sys_t*p_sys;if(!s)returnNULL;s->p_input=p_access->p_input;s->psz_path=strdup(p_access->psz_path);....GDB调试,292stream_t*s=stream_CommonNew(VLC_OBJECT(p_access));Missingseparatedebuginfos,use:debuginfo-i

linux - gdb 在另一个进程的上下文中运行?

我只想了解gdb(或任何其他调试器)如何修改另一个进程地址空间中的内存?我们有一个正在运行的进程,我们附加到它attachpid从这里我们可以修改“附加进程”地址空间中的内存(变量)。这怎么可能。是什么阻止了任何其他进程(不是调试器)做同样的事情。操作系统是否提供特殊的门,调试器可以使用它来查看/修改不同进程的地址空间?还是我理解错了。附加后进程是否在调试器的上下文中运行?如果是这样,这种情况下的变化是如何发生的?如果发生这种情况,我可以假设这将是一个写副本吗?如果是这样,调试器将有不同的内存和修改后的数据。但是一旦我们从gdb修改了一些内存并从进程中分离出来,进程将继续看到修改后的数

使用 GDB 进行 Python 内存调试

我们有一个使用OpenSSL的Python绑定(bind)的Linux应用程序,我怀疑它会导致随机崩溃。有时,我们会看到它崩溃并显示以下消息:PythonFatalError:GCObjectalreadytracked这似乎是库方面的编程错误,或者是内存损坏的症状。给定一个核心文件,有没有办法知道它执行的最后一行Python源代码?或者如果它附加在GDB中?我意识到它可能都是编译的字节码,但我希望有人可能已经处理过这个问题。目前它在跟踪模块处于事件状态的情况下运行,我们希望它会再次发生,但可能需要很长时间。 最佳答案 是的,你可以

c++ - 在 gdb/Ubuntu 14.04.4 LTS 中加载 dl-debug.c

当我使用gdbxxx加载时,结果如下:dl-debug.c:74:Nosuchfileordirectory.dl-debug.c:74:Nosuchfileordirectory.dl-debug.c:74:Nosuchfileordirectory.dl-debug.c:74:Nosuchfileordirectory.dl-debug.c:74:Nosuchfileordirectory.很多,我该如何解决?我已经在网上搜索过了,但所有的答案都不是解决方案。有些人可能会推荐apt-getsourceglibc或apt-getinstalllibc-source,但没有帮助。我试图

linux - 安装较旧的 gdb 版本

我在使用最新的gdb时遇到问题,所以我想使用旧版本。我找到了gdb存档here,但我该如何编译/安装其中之一以便可以使用它?根据manual,首先配置:$./configurecheckingbuildsystemtype...x86_64-unknown-linux-gnucheckinghostsystemtype...x86_64-unknown-linux-gnucheckingtargetsystemtype...x86_64-unknown-linux-gnu[...]configure:creating./config.statusconfig.status:creati

linux - GDB 不会中断动态加载的 .so 文件?

在我的Linux系统中,我正在编写一个在运行时动态加载一些.so库的程序。是这样的:可执行程序在开始运行时,会在某个目录下搜索,然后加载该目录下的所有.so文件。请注意可执行文件和.so是独立构建的,可执行文件的构建不链接到.so文件。我的问题是:在我运行附加了GDB的程序(因此所有.so库都已加载)之后,我似乎能够在.so文件中的代码上设置断点(GDB提示我这个断点设置在一个共享库中),但这个断点实际上从未中断过。我应该如何使这些断点真正起作用?在调试session期间,我在正确的位置提供了所有源代码,并且-g选项处于打开状态。我还删除了编译时的-O2优化。