gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:57:24 24 4
gpt4 key购买 nike

我是一名安卓程序员。

今天我运行一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com