【发布时间】:2017-07-24 12:40:51
【问题描述】:
我正在尝试在服务器上对我怀疑与缓冲区溢出有关的问题进行一些调试,因此我尝试使用 -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 中获得该系统上正确的核心文件(这就是数组溢出的嫌疑来源)。
【问题讨论】:
-
你启用
apport了吗?kernel.core_patternsysctl 的值是多少?
标签: gcc core address-sanitizer