You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OSX下libusb调用libusb_get_device_list返回设备数量异常问题

解决libusb_get_device_list返回设备数异常的问题

排查方向及修复方案

  • 显式初始化libusb上下文
    你当前代码中context直接传NULL使用默认上下文,可能存在初始化不完整或资源竞争问题。建议显式初始化并管理上下文生命周期:

    libusb_context *context = NULL;
    libusb_device **list = NULL;
    int rc, count;
    
    // 初始化上下文
    rc = libusb_init(&context);
    if (rc != LIBUSB_SUCCESS) {
        // 处理初始化失败逻辑
        return;
    }
    
    count = libusb_get_device_list(context, &list);
    
    // 设备列表使用完毕后必须释放
    libusb_free_device_list(list, 1);
    // 退出前销毁上下文
    libusb_exit(context);
    
  • 完善沙盒USB权限配置
    仅开启沙盒USB权限还不够,需在Info.plist中添加具体的设备匹配规则。若要访问所有USB设备,添加以下配置:

    <key>USB</key>
    <array>
        <dict>
            <key>idVendor</key>
            <integer>0</integer>
            <key>idProduct</key>
            <integer>0</integer>
        </dict>
    </array>
    

    另外,沙盒环境下系统权限验证可能存在延迟,可尝试在应用启动后延迟1-2秒再调用libusb_get_device_list。

  • 确保资源正确释放
    若多次调用libusb_get_device_list但未调用libusb_free_device_list释放资源,会导致内存泄漏或设备列表缓存异常,务必保证每次获取列表后都完成释放操作。

  • 检查libusb版本兼容性
    旧版本libusb在macOS沙盒环境下可能存在兼容性问题,建议升级至最新稳定版。可通过Homebrew更新:

    brew upgrade libusb
    
  • 排除调试环境干扰
    尝试在终端直接运行应用(而非通过Xcode启动),验证是否能获取正确设备数,排除Xcode调试环境的权限限制影响。

内容的提问来源于stack exchange,提问作者fra87kdk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 12:06:42