相关疑难解决方法(0)

在gdb中观察内存范围?

我正在调试gdb中的程序,我希望程序在访问内存区域0x08049000到0x0804a000时停止.当我尝试手动设置内存断点时,gdb似乎一次不支持两个以上的位置.

(gdb) awatch *0x08049000
Hardware access (read/write) watchpoint 1: *0x08049000
(gdb) awatch *0x08049001
Hardware access (read/write) watchpoint 2: *0x08049001
(gdb) awatch *0x08049002
Hardware access (read/write) watchpoint 3: *0x08049002
(gdb) run
Starting program: /home/iblue/git/some-code/some-executable
Warning:
Could not insert hardware watchpoint 3.
Could not insert hardware breakpoints:
You may have requested too many hardware breakpoints/watchpoints.
Run Code Online (Sandbox Code Playgroud)

已经有人问过这个问题,答案是,有可能用valgrind做到这一点.不幸的是,答案中没有任何示例或对valgrind手册的引用,所以它不是很有启发性:如何使用gdb来监视整个内存区域的任何变化?

那么:我怎样才能观看整个内存区域?

c linux debugging gdb

27
推荐指数
3
解决办法
2万
查看次数

如何在每一步之后让GDB做一个'列表'?

我可以继续使用gdb,但每次我想看看我在源代码中的位置时,我都必须给出"list"命令.

(gdb) next
351     int right = get_variable(right_token, right_id);
(gdb) list
346         op = "<>";
347         right_id = parse_id_or_crash();
348     }
349     Token * right_token = tokens[parser_index - 1];
350     int left = get_variable(left_token, left_id);
351     int right = get_variable(right_token, right_id);
352     if (op == "<")
353         return left < right;
354     if (op == ">")
355         return left > right;
Run Code Online (Sandbox Code Playgroud)

如果gdb在每一步之后自动列出源代码,那就太好了.如果gdb可以指示我在源代码中的位置(例如使用" - >"或其他内容),这也会很棒.一次看到只有一行代码让我有点幽闭恐慌.

gdb

16
推荐指数
3
解决办法
6367
查看次数

标签 统计

gdb ×2

c ×1

debugging ×1

linux ×1