首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在gdb会话中调用malloc失败

在gdb会话中调用malloc失败
EN

Stack Overflow用户
提问于 2012-02-10 08:01:24
回答 1查看 23.8K关注 0票数 22

我正在尝试调试一个C程序,而gdb告诉我某个函数的第329行有一个段错误。因此,我为该函数设置了一个断点,并尝试逐步执行它。然而,每当我访问第68行时,我都会收到来自gdb的抱怨:

代码语言:javascript
复制
(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的调用显然是成功的。当然,我有:

代码语言:javascript
复制
#include <stdlib.h>.

源代码如下:

代码语言:javascript
复制
    // 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));
EN

回答 1

Stack Overflow用户

发布于 2012-02-10 08:14:57

您可以放心地忽略这一点。gdb抱怨说它没有malloc的源代码--几乎可以肯定的是,你不想一步步了解这个源代码。

两个简单的解决方案:

  • 使用next而不是step -它不会下降为函数
  • 如果您已经意外地step到了一个函数中,请使用finish运行到该函数的step语句。

和另一种方法:

  • 您还可以在段错误之前中断一点,而不是单步执行整个代码。

代码语言:javascript
复制
- 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). 

票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9220853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档