那个核心转储到底在哪里?
Where the heck is that core dump?
TLDR:即使在设置 ulimit
并查看 apport
后也找不到核心转储。厌倦了如此努力地获得单一回溯。底下问题
我在这里做了一个小噩梦。我目前正在做一些 c 编码,在我的情况下,这总是意味着 公吨 的段错误。大多数时候我能够重现这个错误,几乎没有问题,但今天我碰壁了。
我的代码产生的段错误不一致。我需要它正在谈论的核心转储。
所以我要为我的小宝贝 a.out 寻找核心转储。那就是我开始脱发的时候。
我的直觉告诉我,核心转储文件应该存储在工作目录中的某个位置——显然不是这样。看完this,开心地打字:
ulimit -c 750000
还有……什么都没有。我程序的输出告诉我它执行了核心转储 - 但我无法在 cwd 中找到它。因此,在阅读 this 之后,我了解到我应该对 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
...我的程序不够好。
- 这个核心转储文件在哪里?
- 有没有办法手动获取一次核心转储,而无需设置所有内容?我很少需要这些作为文件本身,大多数时候仅 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"
TLDR:即使在设置 ulimit
并查看 apport
后也找不到核心转储。厌倦了如此努力地获得单一回溯。底下问题
我在这里做了一个小噩梦。我目前正在做一些 c 编码,在我的情况下,这总是意味着 公吨 的段错误。大多数时候我能够重现这个错误,几乎没有问题,但今天我碰壁了。
我的代码产生的段错误不一致。我需要它正在谈论的核心转储。
所以我要为我的小宝贝 a.out 寻找核心转储。那就是我开始脱发的时候。
我的直觉告诉我,核心转储文件应该存储在工作目录中的某个位置——显然不是这样。看完this,开心地打字:
ulimit -c 750000
还有……什么都没有。我程序的输出告诉我它执行了核心转储 - 但我无法在 cwd 中找到它。因此,在阅读 this 之后,我了解到我应该对 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
...我的程序不够好。
- 这个核心转储文件在哪里?
- 有没有办法手动获取一次核心转储,而无需设置所有内容?我很少需要这些作为文件本身,大多数时候仅 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"