程序由make运行,但不通过shell运行,为什么?

问题描述 投票:1回答:3

我编写了一个C程序,在其中我做了一些相当大的堆栈分配,大约2 MiB。由于我使用穷人的IDE *,因此每次编译时,我都会通过make自动运行该程序以对其进行测试。

我已经将所有内容都打包好了,但是由于某些原因,在进行某些最终优化时,我直接从外壳程序运行了它。即时段错误!在make仍然可以运行的情况下运行它,而手动运行它总是会产生相同的段错误。

我最终将我正在进行的堆栈分配数量减少到256 KiB,从而解决了该问题。我的理由是,make可能正在执行该过程,因此它继承了一些奇怪的参数,从而使其可以使用更多的堆栈空间。

尽管现在一切都很好,但我无法检验我的理论。任何人都可以确认或拒绝,或提出某种测试方法吗?

* zsh,vim,gcc,gdb和一些坚果的makefile文件

c debugging unix makefile
3个回答
5
投票

您可以尝试使用ulimit(1)设置最大堆栈大小,然后查看是否可行:


1
投票

个人而言,我的第一步是尝试使用gdb或调试printf或其他方法来定位段错误发生的位置。 (这就是为什么您始终检查malloc的返回值,从而减少了段错误的可能原因;-p的原因)。一方面,找到问题的确切根源可以为您提供有关堆栈分配理论的支持或反对;另外,它还允许您插入错误检查代码,以便程序可以通过提示性错误消息(而不是段错误)正常退出。


0
投票

需要更多信息以进行诊断。即,很高兴看到您正在使用的makefile和shell脚本。

© www.soinside.com 2019 - 2024. All rights reserved.