我正在尝试在服务器上对我怀疑与缓冲区溢出有关的问题进行一些调试,因此我尝试编译我的代码-fsanitize=address
以启用地址清理。
它编译,生成的软件运行。但是,当地址清理程序检测到错误时,我正在尝试获取核心转储,因为由于设置,这几乎是我可以从系统中获取信息的唯一方法。
我ASAN_OPTIONS=abort_on_error=1
在命令行上调用该软件(使用 shell 脚本来执行此操作),并检查了它是否ulimit -c
提供了无限的结果,但它不会产生核心转储。
我错过了什么?
这是在具有 gcc 版本 4.8.4 的 ubuntu 14.04 服务器上
编辑:sysctl kernel.core_pattern
回馈kernel.core_pattern = |/usr/share/apport/apport %p %s %c %P
. 这可能意味着启用了 apport(至少以某种形式)。但是,我已经能够从软件中的断言和 SIGFPE 中获得该系统上正确的核心文件(这就是怀疑数组溢出的原因)。