c - 程序在由 make 启动时运行,而不是通过 shell,为什么?

标签 c debugging unix makefile

我编写了一个 C 程序,其中我做了一些相当繁重的堆栈分配,大约 2 MiB。因为我使用的是穷人的 IDE*,所以我每次编译时都会通过 make 自动运行程序以测试它。

我几乎把所有东西都包起来了,但出于某种原因,在一些最后的优化过程中,我直接从 shell 运行它。即时段错误!使用 make 运行它仍然有效,手动运行它总是产生相同的段错误。

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

虽然现在一切都很好,但我无法验证我的理论。任何人都可以确认或否认,或建议某种测试方法吗?

* zsh、vim、gcc、gdb 和一些疯狂的 makefile

最佳答案

您可以尝试使用 ulimit(1) 设置最大堆栈大小看看它是否有效:

# Limit stack to 1024 KiB
ulimit -s 1024; ./myprogram
# Now no limit
ulimit -s unlimited; ./myprogram

关于c - 程序在由 make 启动时运行,而不是通过 shell,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/663617/

相关文章:

c - 找不到共享对象 (libboost_python.so)

c - 如何将一个字符串分成不同的字符

c++ - printf() 在 Xcode 4 调试期间间歇性停止打印

bash - 在您的 ~/.bashrc 文件中引用/etc/bashrc 是强制性的还是必需的?

c - [C]我可以用比参数更大的类型调用 va_arg,然后转换值吗?

c - 在C中打印n元数组的结构

debugging - 如何监控 Coldfusion 中的计划任务是否设置正确?

debugging - 使用gdb,在一行中显示多个变量?

linux - linux中的top -c命令过滤基于进程名列出的进程

java - unix shell 脚本执行调用一个新的 jvm