启用 Developer Tools Access 会使 Unity 和 Activity Monitor 崩溃
Enabling Developer Tools Access crashes Unity and Activity Monitor
从昨天开始我就遇到了开发者工具问题。我用
- Unity(几个不同的版本,例如 2018.4.23),
- Jetbrains Rider(今天更新到2020.1.3,昨天更新到2020.1.2)
- macOS 卡特琳娜 10.15.5
我正在重构一些东西,Developer Tools 要求我提供访问权限:Developer Tools Access 需要控制另一个进程才能继续调试。输入您的密码以允许此...
从那以后,发生了两件事。
如果开发者工具访问已启用(也尝试通过 sudo /usr/sbin/DevToolsSecurity --enable
命令执行此操作)几乎每次我更改代码时, Unity 停止工作(加载轮存在)并且我无法关闭它的应用程序。我尝试使用 Activity 监视器,它没有显示任何活动。我只能看到加载轮。
我什至尝试通过 kill unitypid
终止 Unity 进程,它 "kills" 进程因为它不在进程列表中,但我仍然可以在我的桌面上看到它,就像关闭一样和以前一样。
检查 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
如果 Developer Tools Access 被禁用,应用程序会多次要求我启用它。按取消几次后,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,还是不行。
非常感谢您的帮助!
经过进一步调查,我发现了以下重现:
- 创建一个派生自
PropertyAttribute
的自定义属性,在其构造函数中调用 AssetDatabase.FindAssets("somethingsomething")
。
- 创建一个 class(在我的例子中,它派生自
MonoBehaviour
class,以便能够调用构造函数,因为游戏对象放置在场景中)包含具有上述自定义属性的字段。
- 向该字段添加
FormerlySerializedAs
属性(例如在重构期间)。
- 创建一个带有您的 class 的游戏对象。
这将导致弹出窗口 window,其中包含我在问题中提到的消息:
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 问题跟踪器的 link:https://issuetracker.unity3d.com/issues/crash-when-using-assetdatabase-dot-findassets-in-a-custom-propertyattribute-and-when-formerlyserializedas-attribute-is-also-used
此时除了
我无能为力了
- 当字段具有自定义 属性 属性时不重构我的字段
附加,
- 在我的 属性 中没有使用
AssetDatabase.FindAssets
构造函数。
这是 2019 年发生在我身上的事情。3.x
当我在播放模式下测试动画和进行更改时,通常会发生这种情况。
只有重新启动才能解决此问题。
从昨天开始我就遇到了开发者工具问题。我用
- Unity(几个不同的版本,例如 2018.4.23),
- Jetbrains Rider(今天更新到2020.1.3,昨天更新到2020.1.2)
- macOS 卡特琳娜 10.15.5
我正在重构一些东西,Developer Tools 要求我提供访问权限:Developer Tools Access 需要控制另一个进程才能继续调试。输入您的密码以允许此...
从那以后,发生了两件事。
如果开发者工具访问已启用(也尝试通过
sudo /usr/sbin/DevToolsSecurity --enable
命令执行此操作)几乎每次我更改代码时, Unity 停止工作(加载轮存在)并且我无法关闭它的应用程序。我尝试使用 Activity 监视器,它没有显示任何活动。我只能看到加载轮。我什至尝试通过
kill unitypid
终止 Unity 进程,它 "kills" 进程因为它不在进程列表中,但我仍然可以在我的桌面上看到它,就像关闭一样和以前一样。检查 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
如果 Developer Tools Access 被禁用,应用程序会多次要求我启用它。按取消几次后,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,还是不行。
非常感谢您的帮助!
经过进一步调查,我发现了以下重现:
- 创建一个派生自
PropertyAttribute
的自定义属性,在其构造函数中调用AssetDatabase.FindAssets("somethingsomething")
。 - 创建一个 class(在我的例子中,它派生自
MonoBehaviour
class,以便能够调用构造函数,因为游戏对象放置在场景中)包含具有上述自定义属性的字段。 - 向该字段添加
FormerlySerializedAs
属性(例如在重构期间)。 - 创建一个带有您的 class 的游戏对象。
这将导致弹出窗口 window,其中包含我在问题中提到的消息:
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 问题跟踪器的 link:https://issuetracker.unity3d.com/issues/crash-when-using-assetdatabase-dot-findassets-in-a-custom-propertyattribute-and-when-formerlyserializedas-attribute-is-also-used
此时除了
我无能为力了- 当字段具有自定义 属性 属性时不重构我的字段 附加,
- 在我的 属性 中没有使用
AssetDatabase.FindAssets
构造函数。
这是 2019 年发生在我身上的事情。3.x
当我在播放模式下测试动画和进行更改时,通常会发生这种情况。
只有重新启动才能解决此问题。