【发布时间】:2010-12-21 11:53:30
【问题描述】:
示例源代码:
#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;
}
问题:
- 如何指示 gdb (
# gdb -silent ./huge_malloc) 停止/暂停执行,如果malloc()返回0x0,没有检查foo是否为 @987654327 @
【问题讨论】:
-
您能解释一下您要做什么(特别是为什么您要区分
malloc的返回值和foo的结果值)。 -
简单地说,只要 malloc() 返回 NULL 就“中断”——上面的源代码只是一个例子。变量名(在本例中为 foo),可能以其他方式命名。
-
作为一种变通方法,也许您可以中断
malloc(),然后使用命令列表首先退出malloc(),然后如果$eax != 0有条件地继续? -
@Georg: 如何通过 gdb 来实现?
-
只是一个想法,我还没有尝试过,但是看看here。