我正在尝试调试一个C程序,而gdb告诉我某个函数的第329行有一个段错误。因此,我为该函数设置了一个断点,并尝试逐步执行它。然而,每当我访问第68行时,我都会收到来自gdb的抱怨:
(gdb) step
68 next_bb = (basic_block *)malloc(sizeof(basic_block));
(gdb) step
*__GI___libc_malloc (bytes=40) at malloc.c:3621
3621 malloc.c: No such file or directory.
in malloc.c
我不知道这是什么意思。程序在除一组输入之外的所有输入上都能完美运行,因此在程序的其他执行过程中,对malloc的调用显然是成功的。当然,我有:
#include <stdlib.h>.
源代码如下:
// Block currently being built.
basic_block *next_bb = NULL;
// Traverse the list of instructions in the procedure.
while (curr_instr != NULL)
{
simple_op opcode = curr_instr->opcode;
// If we are not currently building a basic_block then we must start a new one.
// A new block can be started with any kind of instruction.
if (!in_block)
{
// Create a new basic_block.
next_bb = (basic_block *)malloc(sizeof(basic_block));
发布于 2012-02-10 08:14:57
您可以放心地忽略这一点。gdb抱怨说它没有malloc的源代码--几乎可以肯定的是,你不想一步步了解这个源代码。
两个简单的解决方案:
next
而不是step -它不会下降为函数step
到了一个函数中,请使用finish
运行到该函数的step
语句。和另一种方法:
- You can do this by putting a breakpoint on a particular line with `break <source file>:<line num>` (for example `break foo.c:320` to break on line 320 of foo.c).
- Or you can break on a particular function with `break <function name>` (for example `break foo` will break at the top of the `foo()` function).
https://stackoverflow.com/questions/9220853
复制相似问题