【问题标题】:Enabling Developer Tools Access crashes Unity and Activity Monitor启用开发人员工具访问会导致 Unity 和 Activity Monitor 崩溃
【发布时间】:2020-06-02 12:58:06
【问题描述】:

我从昨天开始就遇到了开发者工具问题。我用

  • Unity(几个不同的版本,例如2018.4.23),
  • Jetbrains Rider(今天更新到 2020.1.3,昨天更新到 2020.1.2)
  • macOS Catalina 10.15.5

我正在重构一些东西,开发者工具要求我访问:开发者工具访问需要控制另一个进程才能继续调试。输入您的密码以允许此操作...

从那时起,发生了两件事。

  1. 如果启用了开发人员工具访问权限(也尝试通过 sudo /usr/sbin/DevToolsSecurity --enable 命令执行此操作),几乎每次我在代码中更改某些内容时,Unity 都会停止工作(存在加载轮),我可以不要关闭它的应用程序。我尝试使用活动监视器,它没有显示任何活动。我只能看到装载轮。

    我什至尝试通过kill unitypid 终止 Unity 进程,它“终止”了该进程,因为它不在进程列表中,但我仍然可以在我的桌面上看到它,就像以前一样关闭。

    检查 Unity 日志,我可以看到它停止:

    Begin MonoManager ReloadAssembly
    
    custom-attrs.c:1250: (null) 
       assembly:/Applications/Unity/Hub/Editor/2018.4.17f1/Unity.app/Contents/Managed/UnityEngine/UnityEngine.CoreModule.dll type:UnityException member:(null) signature:<none>
    
    Stacktrace:
    Native stacktrace:
        0   libmonobdwgc-2.0.dylib              0x00000001460b4976 mono_handle_native_crash + 242
    
  2. 如果开发者工具访问被禁用,应用程序会询问我几次以启用它。按几次取消后,Unity 崩溃并关闭,让我能够向 Apple 发送日志错误,但以下情况除外:

    Exception Type:        EXC_CRASH (SIGABRT)
    
    Exception Codes:       0x0000000000000000, 0x0000000000000000
    Exception Note:        EXC_CORPSE_NOTIFY
    
    Application Specific Information:
    abort() called
    

真的不知道该怎么办。我尝试更新 Rider,Catalina,安装新的 Unity 版本。

更新:我格式化了磁盘并再次安装了Catalina,它仍然无法正常工作。

非常感谢您的帮助!

【问题讨论】:

    标签: macos unity3d jetbrains-ide developer-tools rider


    【解决方案1】:

    经过进一步调查,我发现了以下重现:

    • 创建一个派生自PropertyAttribute 的自定义属性,该属性在其构造函数中调用AssetDatabase.FindAssets("somethingsomething")
    • 创建一个包含具有上述自定义属性的字段的类(在我的情况下,它派生自 MonoBehaviour 类,以便能够调用构造函数,因为游戏对象放置在场景中)。李>
    • FormerlySerializedAs 属性添加到该字段(例如在重构期间)。
    • 创建一个附加类的游戏对象。

    这将导致一个弹出窗口,其中包含我在问题中提到的消息:

    Developer Tools Access 需要控制另一个进程才能继续进行调试。输入您的密码以允许此操作...

    例子:

        using System.Diagnostics;
        using UnityEditor;
        using UnityEngine;
    
        public class CustomObjectPathAttribute : PropertyAttribute
        {    
            /// <summary>
            /// Default constructor.
            /// </summary>
            public CustomObjectPathAttribute()
            {
                var guids = AssetDatabase.FindAssets("Resources");
            }
        }
    

    using UnityEngine.Serialization;
    
    [System.Serializable]
    public class TestClass
    {
        /// <summary>
        /// Path to the file.
        /// </summary>
        [FormerlySerializedAs("pathToFile")]
        [CustomObjectPath]
        public string pathToFile2 = string.Empty;
    }
    

    using System.Collections.Generic;
    using UnityEngine;
    
    public class MyBehaviour : MonoBehaviour
    {
        private List<TestClass> testClasses;
    
        void Start()
        {
            testClasses = new List<TestClass>();
        }
    }
    

    MyBehaviour 脚本附加到放置在场景中的游戏对象。项目重新编译后会出现该问题。

    如果TestClass 中的字段没有附加FormerlySerializedAs 属性,则在自定义属性的构造函数中使用AssetDatabase.FindAssets("Resources") 可以正常工作。

    我已向 Unity QA 团队报告了该错误,他们成功地重现了该问题。这是 Unity 问题跟踪器的链接:https://issuetracker.unity3d.com/issues/crash-when-using-assetdatabase-dot-findassets-in-a-custom-propertyattribute-and-when-formerlyserializedas-attribute-is-also-used

    除了

    之外,我现在无能为力了
    • 当我的字段具有自定义属性属性时不重构它们 附上,
    • 不在我的财产中使用AssetDatabase.FindAssets 构造函数。

    【讨论】:

      【解决方案2】:

      这在 2019.3.x 发生在我身上

      这通常发生在我测试动画并在播放模式下进行更改时。

      只有重新启动才能解决问题。

      【讨论】:

      猜你喜欢
      • 2018-10-02
      • 1970-01-01
      • 2018-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多