gdb相关内容
我正在使用我在 Linux 中的直接内存访问 上发布的驱动程序将一些物理内存映射到用户空间地址.但是,我不能使用 GDB 查看任何地址;即 x 0x12345678(其中 0x12345678 是 mmap 的返回值)失败并出现错误“无法访问地址 0x12345678 的内存". 有没有办法告诉GDB这块内存可以查看?或者,我可以在 mmap 中做些什么不同的事情(调用或 foo_mmap
..
我想在 C 中查看我的程序的内存布局,以便我可以在运行时了解内存的所有不同部分,例如 BSS 或堆中的变化? 解决方案 在Linux中,对于进程PID,查看/proc/PID/maps和/proc/PID/smaps 伪文件.(进程本身可以使用/proc/self/maps和/proc/self/smaps.) 它们的内容记录在 man 5 proc 中. 这是一个示例,说明如
..
如果我为当前作用域的局部变量设置了观察点,它会在超出作用域时被自动删除.有什么方法可以设置一次并在进入相同范围时使其自动保持活动状态? 是否可以设置条件观察点,例如 watch var1 if var1==0?在我的情况下,条件不起作用.每当 var1 的值更改时,gdb 就会停止,而不是直到 var1 == 0 为真.我的 gdb 是 GNU gdb 6.8-debian. 解决方案
..
我想知道是否有任何方法可以监视变量的值,直到例如计数器达到一个值,然后在每个计数器值期间记录变量值的输出? 解决方案 在计数器上设置观察点: (gdb) 观察变量 并使该观察点有条件: (gdb) cond var>=值 如果要登录到文件: (gdb) 设置日志文件(gdb) 设置登录 默认情况下 gdb 记录到 gdb.txt
..
我有一个程序,我正在尝试使用 gdb 对其进行调试.在程序内部,我有一些方法要求用户使用标准输入输入.当我在 gdb 中时,如何输入此输入?这样我就可以追踪我的方法是如何工作的? 解决方案 $ cat >foo
..
假设我有一个 C++ 数组: double* velocity = new double[100]; 使用 GDB 命令行,我可以通过以下命令查看这个数组: >打印*速度@ 100 它会打印出数组中所有双精度值的格式正确的列表. 但是,当使用 Xcode 调试器时,它最多会将其视为指向单个双精度值的指针,并在变量列表中显示 velocity[0]. 这使它成为调试包含大型动态分
..
我在 exit 和 _exit 上设置了断点,我的程序(在 linux 2.6.16.46-0.12 sles10 上运行的多线程应用程序)不知何故仍在以我无法定位的方式退出 (gdb) c...[新线程 47513671297344 (LWP 15279)][新线程 47513667103040 (LWP 15280)][新线程 47513662908736 (LWP 15281)]程序以代码
..
..
假设我们有以下超级简单的 Python 脚本: 打印“初始化"....a=10print "变量值为 %d" % (a)打印“全部完成!" ...然后说,我想通过在 a=10 行放置一个断点来调试此脚本,然后单步执行该脚本. 现在,我想为此使用 gdb,因为我想调试可能作为共享对象(.so) 库 - 因此,理想情况下,我会在 Python 代码行上放置一个断点,然后“进入"共享对象的 C
..
..
请帮助我理解这一点:- (gdb) 信息框堆栈级别 0,帧在 0xb75f7390:eip = 0x804877f in base::func() (testing.cpp:16);保存eip 0x804869a在 0xb75f73b0 处按帧调用源语言c++.参数列表在 0xb75f7388,参数:this=0x00xb75f7388 处的局部变量,前一帧的 sp 为 0xb75f7390保存
..
..
..
我在 Linux 环境中开发 C++ 应用程序.我每天使用的工具包括带有 CDT 插件的 Eclipse、gdb 和 valgrind. 其他人使用什么工具?Linux 上是否有任何东西可以与 Microsoft Visual Studio 的流畅性相媲美? 解决方案 我用了一堆终端窗口.我在有趣的源文件上运行 vim,在另一个文件上运行 make 和 g++ 以用于编译器错误或用于运行
..
如果我用 -g 标志编译文件启动 gdb -tui 或 gdbtui,然后设置 b main 然后按 r 我得到提示 dl-debug.c:74 no such file or directory 并且单步执行源窗口时的输出将被写入源窗口在底部,这也弄乱了这个窗口,所以它不是真的可读.我已经看过 askubuntu.com 和 Sourceware Bugzilla – Bug 列表 并在此站点上
..
考虑以下(损坏的)代码: #include #include 使用命名空间标准;类测试{上市:unique_ptr小号;测试():s(NULL){}无效更新(字符串& st){s = unique_ptr(&(st));}};无效更新(测试& t){字符串 s("你好");t.update(s);}int main() {测试 t;更新(t);cout 这里我们在
..
在 gdb 中,我似乎无法访问任何伪寄存器:r8b、r9b、r10b、r11b、r12b、r13b、r14b 和 r15b(但是,r15d 和 r15w 似乎可以工作,sil 也一样). 看一个例子: section .text全球主要主要的:xor esi, esimov sil, 0x1f异或 r13d, r13dmov r13b, silret 使用 gdb 运行: (gdb)
..
我编写了一个简单的汇编代码,现在我正在尝试使用 gdb 对其进行调试. 在 gdb 中我输入了: (gdb) break _start0x4000b0 处的断点 1 断点地址(0x4000b0)是否相对于代码行的硬盘内存位置?还是仅与节目长度有关?(我认为此时程序还没有加载到 RAM 中) 解决方案 它是RAM中的一个虚拟地址.你有一个位置相关可执行文件,所以它将加载到的绝对地址
..
我想在文件的所有函数上放置断点.我遇到了这个链接:http://sourceware.org/gdb/download/onlinedocs/gdb/Set-Breaks.html#Set-Breaks 建议为此使用 rbreak 命令.当我使用“rbreak"时.,它可以按预期正常工作,并在 prog 的所有功能中放置断点.但是什么时候使用 rbreak 文件名.c:. 这根本
..
两段示例代码;首先将一些 C++ 代码调用到程序集中: /* test1.cc */#include extern "C" 无效 blah();外部“C"无效的东西(){printf("这是一个测试\n");}int main(int argc, char *argv[]) {废话();返回0;} ...然后是程序集: .file "test2.s".文本.globl 等等
..