我的真实gdb脚本在分析核心文件时尝试取消引用指针并得到“源命令文件中的错误:无法访问地址处的内存”,然后我的gdb脚本停止。我想要的只是不停地继续执行我的gdb脚本。可能吗?这是演示我的问题的测试程序和测试gdb脚本。在这种情况下,指针具有NULL值,但在实际情况下,指针可能没有null无效值。这是测试C程序:#includestructmy_struct{intv1;intv2;};intmain(){my_struct*p;printf("%d%d\n",p->v1,p->v2);return0;}这是一个测试gdb脚本:>catanalyze.gdbpp->v1q这是问题的演示
如果我使用gdb-tui调试文件,源代码窗口总是会变得一团糟。所以每次我点击enter我必须立即输入ctrl+L来解决这个问题,这就是gdb刷新窗口。我正在使用gnuscreen处理tty。有没有可能在tui模式下自动刷新gdb?如果gdb没有这种能力,Python可能是一个解决方案,因为gdb能够获取Python文件,但我不了解Python。这个Python片段在Bash中运行良好,但在gdb中运行不正常:importsysr="\033[2J"#hereItrytoemulate[ctrl-L]t=""while1:i=sys.stdin.read(1)t=t+iifi=='\n'
我对Python不是很熟悉,我只是在发现GDBpython脚本功能;我的问题的动机是增强MELTmonitor中值的GDB打印。稍后将连接到GCCMELT.但这里有一个更简单的变体。我的系统是Linux/Debian/Sid/x86-64。GCC编译器是4.8.2;GDB调试器是7.6.2;它的python是3.3我想调试一个带有“discriminatedunion”类型的C程序://filetiny.cinthepublicdomainbyBasileStarynkevitch//compilewithgcc-g3-Wall-std=c99tiny.c-otiny//debugwi
我的gdb是GNUgdbRedHatLinux(6.3.0.0-1.162.el4rh),我无法调试模板。如何使用此调试器调试模板? 最佳答案 如果您的问题只是关于在代码中放置断点。这是一个小片段例如:main.cpp#includetemplatevoidcoin(Tv){std::coutclassFoo{public:Tbar(Tc){returnc*2;}};intmain(intargc,char**argv){Foof;coin(f.bar(21));}编译g++-O0-gmain.cppgdb./a.out(gdb)b
当从emacs启动gdb时,emacs说gdb应该启动为gdb-i=mi选项-i未在gdb手册页中定义。如果从命令行使用选项-i=mi调用gdb,它就可以工作。所以它必须特定于gdb。-i选项的文档在哪里? 最佳答案 gdb-i=mi等同于gdb--interpreter=mi。简而言之,--interpreter=mi使gdb呈现面向机器的文本界面,而不是没有它时的面向人的命令提示符。Emacs的gud缓冲区解析此接口(interface)的输出,并向您呈现类似于普通gdb接口(interface)的内容。--interprete
将核心转储加载到GDB时,会显示它自动崩溃的原因。例如Programterminatedwithsignal11,Segmentationfault.有什么办法可以重新获取信息吗?问题是,我正在编写一个需要此信息的脚本。但是,如果信号仅在加载核心转储后可用,我以后就无法访问该信息。这么重要的功能真的没有命令吗? 最佳答案 打印最后一个信号执行的信息p$_siginfo 关于linux-如何在GDB中打印最后接收到的信号?,我们在StackOverflow上找到一个类似的问题:
有没有办法在不附加GDB的情况下打印所有线程的堆栈跟踪?或者是否有一个命令可以用作gdb批处理模式来打印所有线程的堆栈跟踪? 最佳答案 elfutils其他实用程序包括eu-stack:eu-stackPrintastackforeachthreadinaprocessorcorefile.它比gdb或pstack更快,后者只是gdb的shell脚本包装器。要打印堆栈跟踪,请运行eu-stack,如下所示:$eu-stack-p2209PID2209-processTID2209:#00x00007f53476b667b__poll
我使用一个调试脚本,它与调试器一起连续运行几个相关进程。我目前正在使用-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
嘿嘿我编写了这个非常基本的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示例(以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