Tag: gdb

如何使GDB断点在达到给定的次数后才会中断?

我有一个被称为大量次的函数,并最终segfaults。 但是,我不想在这个函数中设置一个断点,每次调用它之后都会停下来,因为我会在这里呆上好几年。 我听说我可以在GDB中设置一个counter作为断点,每次命中断点时,计数器递减,只有当counter = 0时才触发。 这是准确的,如果是的话,我该怎么做? 请给gdb代码设置这样一个断点。

以hex或十进制格式打印variables

目前,当我在GDB( print v )中print vvariablesv的值时,我得到一个整数。 GDB可能以hex或二进制打印这样的整数variables吗?

使用Eclipse / CDTdebuggingC ++代码时更好地进行variables探索

使用Eclipse和CDT来debuggingC ++代码,variables窗口很麻烦,对于在标准模板库或boost中定义的types(例如shared_ptr)来说并不是很有帮助。 只是一个例子,这可能看起来像一个std :: vector: bar {…} std::_Vector_base<TSample<MyTraits>, std::allocator<TSample<MyTraits> > > _M_impl {…} std::allocator<TSample<MyTraits> > {…} _M_start 0x00007ffff7fb5010 _M_finish 0x00007ffff7fd4410 _M_end_of_storage 0x00007ffff7fd5010 即使这些关于这些types的内部信息可能是有用的,几乎在任何情况下,我都希望在这里有一个更清晰的表示,也就是std :: vector的值列表。 有什么工具,插件或其他修改可以做到这一点? 编辑 以下解决scheme不适用于Linux。 我使用的是Ubuntu 14.04,eclipse,g ++,gdb。 我不能find一个包gdb-python和Linux不使用mingw

Gdb打印到文件而不是标准输出

我正在运行gdb,并想要检查其中一个不幸的上帝的对象。 它需要很多页面(我有一个24“的显示器侧面翻转!)看到整个事情。为了方便使用,我想gdb打印对象的文件,而不是屏幕,所以我可以打开它在vi,轻松移动,所有gdb的多function性,必须有办法做到这一点,对吧?

GDB:如果variables相等,则中断

我想让GDB设置一个断点,当一个variables等于我设置的某个值时,我试过这个例子: #include <stdio.h> main() { int i = 0; for(i=0;i<7;++i) printf("%d\n", i); return 0; } GDB输出: (gdb) break if ((int)i == 5) No default breakpoint address now. (gdb) run Starting program: /home/SIFE/run 0 1 2 3 4 5 6 Program exited normally. (gdb) 就像你看到的那样,GDB没有任何突破点,这对GDB来说可能吗?

gdb – 如何自动运行可执行文件?

我想让gdb立即运行可执行文件,就像我input“run”(动机:我不喜欢键入“run”)。 一种方法是将命令传输到gdb如下所示: $ echo run | gdb myApp 但是这种方法的问题是你失去了与gdb交互性,例如。 如果断点触发或myApp崩溃, gdb退出。 这个方法在这里讨论。 看看–help中的选项,我没有办法做到这一点,但也许我错过了一些东西。

将核心文件保存在gdb中

是否有可能使用gdb 保存/转储核心文件? 有时我想保存文件以后再分析。

使用gdb在指定的可执行文件之外单步执行汇编代码会导致错误“找不到当前函数的范围”

我在gdb的目标可执行文件之外,我甚至没有对应于该目标的堆栈。 无论如何,我想要单步执行,这样我就可以validation我的汇编代码中发生了什么,因为我不是x86汇编的专家。 不幸的是,gdb拒绝做这个简单的汇编级debugging。 它允许我在适当的断点处设置和停止,但是一旦我尝试单步启动,gdb会报告错误“无法find当前函数的边界”,EIP不会改变。 额外细节: 机器代码是由gcc asm语句生成的,我将它从objdump -d的输出复制到执行的内核内存位置。 我不介意使用加载器将对象代码加载到重定位地址的简单方法,但请记住加载必须在内核模块中完成。 我想另外一个select是产生一个假的内核模块或debugging信息文件给gdb,使它相信这个区域在程序代码中。 gdb在内核可执行文件本身上工作正常。 (对于那些真正想知道的人,我在运行时将代码插入到VMware VM内的Linux内核数据空间中,并通过gdb从gdb远程debugging内核,通过VMware Workstation的内置gdb存根对其进行debugging。注意我没有编写内核利用;我是一个安全研究生写一个原型。) (我可以在我的程序集里面的每条指令上设置一个断点,这样做可能会花费一些时间,因为x86汇编指令的大小会有所不同,并且每次重启时程序集的位置都会改变。

获取GDB中所有线程的回溯

在GDB中是否有与Windbg的“!process 0 7”相同的命令? 我想提取转储文件中的所有线程及其在GDB中的回溯。 “信息线程”不输出堆栈跟踪。 那么,有没有什么命令呢?

如何在Linux中启动GDB时传递命令行参数?

我必须debugging一个有错误的程序,作为我的任务的一部分。 不过,我必须先通过命令行参数来解决这个问题。 我做: gdb -tui InsertionSortWithErrors 哪些工作,但之后,我不知道如何传递论据。 我使用gdb -help ,它说了一些关于–args ,我也试过了,它不起作用。 我希望能够得到debugging器+ gui并传递命令行参数。