我是一名安卓程序员。
今天我运行一个 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/