那个核心转储到底在哪里?

Where the heck is that core dump?

TLDR:即使在设置 ulimit 并查看 apport 后也找不到核心转储。厌倦了如此努力地获得单一回溯。底下问题

我在这里做了一个小噩梦。我目前正在做一些 c 编码,在我的情况下,这总是意味着 公吨 的段错误。大多数时候我能够重现这个错误,几乎没有问题,但今天我碰壁了。

我的代码产生的段错误不一致。我需要它正在谈论的核心转储。

所以我要为我的小宝贝 a.out 寻找核心转储。那就是我开始脱发的时候

我的直觉告诉我,核心转储文件应该存储在工作目录中的某个位置——显然不是这样。看完this,开心地打字:

ulimit -c 750000

还有……什么都没有。我程序的输出告诉我它执行了核心转储 - 但我无法在 cwd 中找到它。因此,在阅读 this 之后,我了解到我应该对 apportcore_pattern 做一些事情。

更改 core_pattern 对于获得一个核心转储来说似乎有点太多了,我真的不想弄乱它,因为我知道 我会 以后忘了吧。而且我往往会把这些事情搞得一团糟。

Apport 具有神奇的 属性 功能,可以选择哪些核心转储有价值,哪些没有价值。日志告诉我...

ERROR: apport (pid 7306) Sun Jan  3 14:42:12 2016: executable does not belong to a package, ignoring

...我的程序不够好。


  1. 这个核心转储文件在哪里?
  2. 有没有办法手动获取一次核心转储,而无需设置所有内容?我很少需要这些作为文件本身,大多数时候仅 GDB 就足够了。像 let_me_look_at_the_core_dump <program name> 这样的东西会很棒。

我已经有些秃顶了,如有任何帮助,我们将不胜感激。

所以,今天我学到了:

  • ulimit 在重新打开 shell 后重置。
  • 我在 .zshrc 中犯了一个大错误 - zsh 在键入一些命令后嵌套并重新打开。

在摆弄了一下之后,我也找到了第二个问题的解决方案。制作 shell 脚本:

ulimit -c 750000
./a.out
gdb ./a.out ./core
ulimit -c 0
echo "profit"