哪个核心转储? (Linux)的

时间:2016-01-03 14:31:12

标签: linux debugging coredump

TLDR :即使设置ulimit并查看apport,也无法找到核心转储。厌倦了努力工作以获得单一的回溯。底部的问题。

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

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

所以我正在寻找一个核心转储,因为我的小宝贝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>这样的东西会很棒。
  3. 我已经秃了一点,所以任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:3)

所以,今天我学会了:

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

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

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