FORTIFY_SOURCE:FD_SET:文件描述符 >= FD_SETSIZE。调用 abort()

2024-03-11

我是一名安卓程序员。

今天我运行一个 Android 应用程序,当时我遇到了此类错误。

FORTIFY_SOURCE:FD_SET:文件描述符 >= FD_SETSIZE。调用 abort()。

因此,如果有人知道这个问题的答案,请回复我。


您的进程打开了太多文件描述符或套接字,当达到操作系统限制时,您的应用程序将被终止。

您的应用程序不太可能合法地用完所有资源,这很可能是泄漏。您很可能错过对套接字或文件资源的 Close() 调用。

我在使用相同代码的各种 Android 设备上遇到了这个问题。最常见的错误签名是:

01-27 15:50:52.431 I/DEBUG   (  172): pid: 12444, tid: 19014, oom: 0, name: DrmRequestHandl  >>> YOUR_PACKAGE_NAME <<<
01-27 15:50:52.431 I/DEBUG   (  172): signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
01-27 15:50:52.517 I/DEBUG   (  172): Abort message: 'FORTIFY_SOURCE: FD_SET: file descriptor >= FD_SETSIZE. Calling abort().'

您可以检查设备调用的描述符限制:

adb shell ulimit -n

作为解决问题的第一步,您可能需要弄清楚泄漏的是哪种资源。您可以通过以下方式找出应用程序的进程 ID:

 adb shell ps

然后使用进程 ID,当您的应用程序仍在运行时,您可以检查打开的描述符(您需要 root 访问权限或可调试的应用程序/ROM):

adb shell ls -l  /proc/[YOUR_PROCESS_ID]/fd

对于进程 12345 来说,它会是这样的:

adb shell ls -l  /proc/12345/fd

这将列出描述符。在较旧的 Android 版本上,列表中可以有 1024 个项目,在 Lollipop 上,我看到 2048 作为默认限制。

For 可调试的应用程序,您可以使用run-as(参见@Joe的评论):

adb shell run-as com.mycompany.myapplication ls -l /proc/12345/fd
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FORTIFY_SOURCE:FD_SET:文件描述符 >= FD_SETSIZE。调用 abort() 的相关文章

随机推荐