核心转储到底在哪里?

Bła*_*lik 5 linux debugging coredump

TLDR:即使在设置ulimit并查看apport. 厌倦了努力工作以获得单个回溯。底部的问题。

我在这里做了一个小噩梦。我目前正在做一些 c 编码,在我的情况下总是意味着一公吨的段错误。大多数情况下,我几乎可以毫无问题地重现该错误,但今天我遇到了麻烦。

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

所以我正在寻找一个核心转储,为了我的小宝贝。那是我开始拔头发的时候

我的直觉告诉我,核心转储文件应该存储在工作目录中的某个地方——显然不是这样。看完这个,我高兴地键入:

ulimit -c 750000
Run Code Online (Sandbox Code Playgroud)

没事了。我的程序的输出告诉我它进行了核心转储 - 但我在 cwd 中找不到它。因此,在阅读本文后,我了解到我应该对apport和做一些事情core_pattern

core_pattern获得一个核心转储的改变似乎有点太多,我真的不想惹它,因为我知道我以后会忘记它。我倾向于把这些事情搞得一团糟。

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

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

...我的程序不够好。


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

我已经有点秃顶了,所以任何帮助将不胜感激。

Bła*_*lik 3

所以,今天我学到了:

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

经过一番摆弄后,我还找到了第二个问题的解决方案。制作一个shell脚本:

ulimit -c 750000
./a.out
gdb ./a.out ./core
ulimit -c 0
echo "profit"
Run Code Online (Sandbox Code Playgroud)