首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果malloc通过gdb返回NULL,如何设置条件断点

如果malloc通过gdb返回NULL,如何设置条件断点
EN

Stack Overflow用户
提问于 2010-12-21 11:53:30
回答 2查看 2.8K关注 0票数 7

示例源代码:

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

#define         GIGABYTE        1024*1024*1024

int
main (void)
{
        void    *foo;
        int     result;

        foo = (void *) malloc (GIGABYTE*5);
        result = errno;

        if (foo != NULL) {
                return 2;
        } else {
                fprintf (stderr, "ERROR: %d\n", result);
                return 1;
        }
        return 0;
}

问题:

0x0

  • 如何指示gdb (# gdb -silent ./huge_malloc)停止/停止执行,如果malloc()返回0x0不需要检查foo是否为
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-21 23:38:47

您可以识别malloc的退出点并在其中放置一个条件断点。例如:

代码语言:javascript
复制
(gdb) tbreak main
Breakpoint 1 at 0x4005c4: file t.c, line 13.
(gdb) r
Starting program: /var/tmp/a.out 
main () at t.c:13
13          foo = malloc (64);
(gdb) br *__libc_malloc+211 if $rax==0
Breakpoint 2 at 0x7f26d143ea93
(gdb) n
14          foo = malloc (GIGABYTE*64);
(gdb) p foo
$1 = (void *) 0x21dc010
(gdb) n

Breakpoint 2, 0x00007f26d143ea93 in malloc () from /lib/libc.so.6

注意,我添加了一个首先成功的malloc调用,以说明断点只触发一个NULL返回值。断点地址可能随libc版本的不同而不同,我发现它是通过逐步使用mallocnexti来实现的,直到我到达ret指令。

票数 7
EN

Stack Overflow用户

发布于 2010-12-21 13:10:20

您就不能在malloc上编写一个包装器,保存返回值,然后在该值上设置一个条件断点?

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

https://stackoverflow.com/questions/4498965

复制
相关文章

相似问题

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