草庐IT

runtime-gdb

全部标签

linux - 如何在 GDB 中打印最后接收到的信号?

将核心转储加载到GDB时,会显示它自动崩溃的原因。例如Programterminatedwithsignal11,Segmentationfault.有什么办法可以重新获取信息吗?问题是,我正在编写一个需要此信息的脚本。但是,如果信号仅在加载核心转储后可用,我以后就无法访问该信息。这么重要的功能真的没有命令吗? 最佳答案 打印最后一个信号执行的信息p$_siginfo 关于linux-如何在GDB中打印最后接收到的信号?,我们在StackOverflow上找到一个类似的问题:

c++ - 在不附加 GDB 的情况下获取所有线程的堆栈跟踪

有没有办法在不附加GDB的情况下打印所有线程的堆栈跟踪?或者是否有一个命令可以用作gdb批处理模式来打印所有线程的堆栈跟踪? 最佳答案 elfutils其他实用程序包括eu-stack:eu-stackPrintastackforeachthreadinaprocessorcorefile.它比gdb或pstack更快,后者只是gdb的shell脚本包装器。要打印堆栈跟踪,请运行eu-stack,如下所示:$eu-stack-p2209PID2209-processTID2209:#00x00007f53476b667b__poll

c - 让 gdb 在成功终止时自动退出?

我使用一个调试脚本,它与调试器一起连续运行几个相关进程。我目前正在使用-x自动执行多个命令(例如run)。如何让gdb在被调试的进程成功终止时自动退出?在命令文件中添加一个quit命令将导致该命令不仅在成功终止时被处理,而且当错误也发生时(那时我宁愿接管)。这是正在发生的事情的摘录:+gdb-return-child-result-xgdbbatch--args./mkfs.cpfs/dev/loop0GNUgdb(GDB)7.1-ubuntuReadingsymbolsfrom/home/matt/cpfs/mkfs.cpfs...done.Programexitednormally

linux - 帮助理解 GDB 中一个非常基本的 main() 反汇编

嘿嘿我编写了这个非常基本的main函数来尝试反汇编,并查看并希望了解较低级别发生的事情:intmain(){return6;}使用gdb来disasmain会产生这个:0x08048374:lea0x4(%esp),%ecx0x08048378:and$0xfffffff0,%esp0x0804837b:pushl-0x4(%ecx)0x0804837e:push%ebp0x0804837f:mov%esp,%ebp0x08048381:push%ecx0x08048382:mov$0x6,%eax0x08048387:pop%ecx0x08048388:pop%ebp0x080483

c - Linux C : Easy & 'pretty' dump/printout of structs (like in gdb) - from source code?

我正在构建的内核模块中的一些结构存在一个小问题,所以我认为如果有一种简单的方法来打印结构及其值会很好——下面是一个小的用户态示例我的意思。假设我们有如下简单的C示例(以bash命令的形式给出):FN=mtestcat>$FN.c//printf#include//callocstructperson{intage;intheight;};staticstructperson*johndoe;main(){johndoe=(structperson*)calloc(1,sizeof(structperson));johndoe->age=6;asm("int3");//breakpoin

c - 如何使用 gdb 查看宏扩展的每一行的逐步执行

我有一个宏,其定义大约有50行,并且有很多“ifelse”语句。此宏def'n出现在.h文件中。我正在运行“TUI模式下的gdb”,但是当执行到该宏时,代码窗口变为空白,仅在执行宏代码后才返回。我想逐行执行完整的宏代码。请让我知道如何做到这一点(一种方法是用代码中的定义替换宏,然后重新编译它。我不想使用这个选项,因为我的代码中有几个这样的宏)。任何帮助将不胜感激。期待得到这个问题的解决方案。请让我知道这个问题是否有其他方法而不是使用预处理文件?我有一个代码运行到数百个.c和.h文件中。 最佳答案 一种选择是完全预处理您的C文件,展开

linux - 为什么 gdb 告诉我指针在 x86-64 上是 4 个字节?

在openSUSE、CentOS、Fedora和Ubuntu上使用gdb看到:此gdb配置为“x86_64-unknown-linux-gnu”。(gdb)psizeof(void*)$1=4(gdb)psizeof(长)$2=4为什么gdb在我的所有64位系统上都给我错误的答案? 最佳答案 当您不调试任何特定代码时,似乎gdb选择了一些令人惊讶的默认值。如果你像这样加载一个64位可执行文件:gdb/bin/sh你会得到一个不那么令人惊讶的结果:(gdb)psizeof(void*)$1=8你也可以明确地告诉gdb要做什么:(gdb

java - 如何在 Linux 上使用 GDB 调试 Java -JNI?

谁能指导如何使用GDB调试器在Linux上调试JNI代码(如果可能,请建议其他选项)。-MyJNIprojectwhenrunningonLinuxisleadingtoaJVMcrash.-TheCPPcodehasbeencompiledinto.sofiles.-Iruntheprojectlikethis:*javaxyz.jar-commandline_args_to_project*.我安装了Gdb,但不知道如何使用它调试项目。我还需要使用-g选项编译.cpp文件并调试.so文件吗? 最佳答案 启动您的Java应用程序使

linux - Linux 系统有 gdb 的替代品吗?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭8年前。Improvethisquestion请同时考虑商业和免费调试器。还想看看各自的优缺点。

linux - 在 gdb 中检查 C/C++ 堆内存统计信息

我正在尝试从Linuxamd64上的gdb中调查C/C++堆的状态,有没有好的方法可以做到这一点?我尝试过的一种方法是“调用mallinfo()”,但不幸的是我无法提取我想要的值,因为gdb没有正确处理返回值。我不容易为我附加的进程编写一个要编译成二进制文件的函数,所以我可以简单地实现我自己的函数,通过在我自己的代码中调用mallinfo()来提取值.是否有一个聪明的技巧可以让我即时执行此操作?另一种选择是定位堆并遍历mallocheader/空闲列表;我将不胜感激任何关于我可以从哪里开始寻找它们的位置和布局的指示。我已经尝试使用Google并阅读了大约2个小时的问题,我学到了一些有趣