android - FORTIFY_SOURCE : FD_SET: file descriptor >= FD_SETSIZE. 调用中止()

标签 android

我是一名安卓程序员。

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

FORTIFY_SOURCE: FD_SET: file descriptor >= FD_SETSIZE. Calling 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 是默认限制。

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

adb shell run-as com.mycompany.myapplication ls -l /proc/12345/fd

关于android - FORTIFY_SOURCE : FD_SET: file descriptor >= FD_SETSIZE. 调用中止(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30521826/

相关文章:

javascript - Phonegap 在 Angular 落里构建测试小圆圈

android - 如何在App主视图上添加边框半径?

android - 为什么 MapView onTouchListener 只触发一次?

android - 如何设置View.layout(l, t, r, b)的四个参数

android - 用户 10051 和当前进程都没有 android.permission.INSTALL_PACKAGES

Android TextView 文本对齐

javascript - 如何检查应用程序是否已安装或未使用JavaScript

android - 为什么按 View ID 切换 OnItemSelectedListener 无法找到选定的微调器?

android - 如何将文本附加到android中的编辑文本中?

android - 如何通过android中的按钮增加或减少textview数量