为什么Xcode无法附加到某些程序?

问题描述 投票:0回答:5

我不得不重新安装我的 MacBook Pro。我已经安装了最新的 macOS 和 Xcode 版本所以

macOS 蒙特利 12.0.1 (21A559) 和 版本 13.1 (13A1030d)

我正在编写音频插件,因此为了测试我的插件,我通常运行 DAW(数字音频工作站),就我而言,我大部分时间都在使用 Ableton 或 Bitwig。

因此,如果我开始调试过程,我会收到以下错误: 无法附加到 pid XXXXXX 附加失败(不允许附加到进程。附加失败时,请查看调试服务器条目附近的控制台消息 (Console.app)。拒绝附加权限的子系统可能会记录一条有关为何被拒绝的信息性消息.)

如果我关注 console.app 中的以下几行:

[LaunchAttach](3277)即将执行task_for_pid(2930)

错误:[LaunchAttach] MachTask::TaskPortForProcessID task_for_pid(2930) 失败:::task_for_pid ( target_tport = 0x0203, pid = 2930, &task ) => err = 0x00000005 ((os/kern) 失败)

macOSTaskPolicy:(com.apple.debugserver)可能无法获取任务控制权 (BitwigStudio) 端口 (pid: 2930): (BitwigStudio) 已硬化, (BitwigStudio) 没有 get-task-allow,(com.apple.debugserver) 是 声明的调试器(com.apple.debugserver)不是声明的只读 调试器

1 +0.000000 秒 [0ccd/0103]: 错误:::task_for_pid ( target_tport = 0x0203,pid = 2930,&task)=> err = 0x00000005((os/kern)失败) err = ::task_for_pid ( target_tport = 0x0203, pid = 2930, &task ) => 错误= 0x00000005((操作系统/内核)失败)(0x00000005)

我做了一些研究并发现了这一点: 有关 get-task-allow 做什么的 Stackoverflow 链接

get-task-allow,当登录到应用程序时,允许其他任务 附加到您的应用程序的进程(如调试器)。分配 配置文件要求关闭该值,而开发 配置文件要求打开此值(否则 Xcode 会 永远无法启动并附加到您的应用程序)。

所以我无法用该软件调试我的程序。那是对的吗? :(

xcode macos debugging macos-monterey
5个回答
7
投票

当您无法访问原始源代码或不想重建它时,例如为另一个应用程序(在您的情况下为 DAW)开发插件时,您可以轻松更改应用程序的权限,如下所示按照以下步骤启用调试:

  1. 读取当前权限如下(将

    daw.app
    替换为实际应用名称):

    codesign --display --xml --entitlements daw.entitlements daw.app
    

    注意:在终端应用程序中运行此命令。它将在当前文件夹中创建一个名为

    daw.entitlements
    的文件。仅运行该命令一次或删除之前创建的任何内容
    daw.entitlements
    ;否则该命令将继续附加到同一个文件。

  2. 在任何文本编辑器中打开

    daw.entitlements
    ,然后在文件末尾的
    </dict></plist>
    之前插入以下文本:

    <key>com.apple.security.get-task-allow</key><true/>

    注意:如果已有同名条目,请将其值从

    false
    更改为
    true
    ,而不是添加新条目。

  3. 按如下方式应用新权利(将

    daw.app
    替换为实际应用程序名称):

    codesign -s - --deep --force --options=runtime --entitlements daw.entitlements daw.app
    

这应该可以。万一您在同一文件夹中已有名为

daw.entitlements
的文件,请在所有步骤中使用不同的文件名。


5
投票

您可以调试,但必须将“Code Signing Inject Base Entitlements”设置为“Yes”才能调试

然后您必须添加配置文件。转到 developer.apple.com,然后选择“证书、ID 和配置文件”,为您正在测试的捆绑包 ID 创建配置文件。


5
投票

这在终端上为我解决了问题

sudo DevToolsSecurity -enable

1
投票

我尝试了所有这些,但没有运气,直到我发现我还必须禁用SIP(系统完整性保护)才能附加到我正在开发的音频服务器插件。

希望这可以帮助别人不要像我一样浪费一整天的时间。


0
投票

我可能回复晚了,但这可能对其他人有帮助。对我来说,我不需要改变 Xcode 本身的任何内容。我从 AppStore 安装了 Production App,然后尝试从 Xcode 构建一个 DEBUG 应用程序,这导致它无法附加。

因此解决方案可能很简单,只需卸载应用程序(您的应用程序)(如果已安装),然后尝试重建。

© www.soinside.com 2019 - 2024. All rights reserved.