分段错误后Makefile卡住了

时间:2015-12-02 13:37:12

标签: ubuntu makefile

我有以下makefile规则

$(OUTDIR)/%.out: $(EXAMPLE)/%.c .FORCE | $(OUTDIR)
    myprogram $< -o $@

$(OUTDIR):
     mkdir -p $(OUTDIR)

我使用此makefile规则来测试我的程序。我在示例目录中有一系列示例,并将输出写入outdir。这一切都很好,并帮助我测试我的应用程序。

当我在程序中遇到分段错误时,问题就出现了。当我在控制台中运行我的程序正常时,它返回分段错误并退出。但是,当我从makefile运行它时,它不会返回分段错误,但会卡在makefile规则中。 Make似乎重试它或类似的东西,它分配了大量内存并在几秒钟内填满整个内存。

这是make的错误(我在Ubuntu 14.04.2 LTS上使用GNU Make 3.81)吗?或者有没有人知道一种方法来强制make来检测分段错误并报告它?

更新

我尝试用虚拟程序重现错误,从而产生分段错误。我首先尝试了以下程序,这显然会造成分段错误。

void main(int argc, char **argv){
    int *a = NULL;
    a[0] = 4;
}

制作能够处理这个。它按预期退出并报告分段错误。

我可以重现问题的方法是由于无限递归导致的分段错误(导致堆栈溢出),就像在这个程序中一样。

int recursive(int i){
  if(i > 0){
    recursive(++i);
  }
}

int main(int argc, char **argv){
  recursive(2);
}

这个make填满了整个记忆。似乎make在某种程度上具有无限的堆栈大小,而通常系统限制堆栈。

0 个答案:

没有答案