litfire 理解你的困境,时间压力下确实很难做到尽善尽美。你实现的自定义断言函数MyDebugAssert已经是一个很好的开始,它能够在断言失败时让调试器中断,并且记录相关信息。
针对你提到的NullReferenceException等未被捕获的异常,这些异常通常是由代码中的bug引起的,比如未初始化的对象或空引用等。由于这些异常可能发生在代码的任何位置,所以很难用单一的断言来捕捉它们。
为了尽量捕获这些未处理的异常,你可以考虑添加一个全局的异常处理器。在Unity中,你可以使用Application.logMessageReceived和Application.logMessageReceivedThreaded事件来监听并记录日志消息和异常。虽然这些事件不能用来中断调试器,但它们可以帮助你记录更多的异常信息。
此外,你还可以在程序的入口点(如MonoBehaviour的Start方法或程序的Main方法)添加一个全局的异常处理代码块,如下所示:
Application.SetStackTraceLogType(LogType.Exception, StackTraceLogType.Full);
AppDomain.CurrentDomain.UnhandledException += (sender, e) =>
{
Exception ex = (Exception)e.ExceptionObject;
Debug.LogError("Unhandled Exception: " + ex.Message + "\n" + ex.StackTrace);
Debugger.Break(); // 尝试中断调试器,但可能不会在非调试模式下工作
// Application.Quit(-1); // 如果你希望在异常发生时终止程序
};
注意,Debugger.Break()在非调试模式下可能不起作用,但它会在调试模式下中断调试器,让你能够检查异常发生时的程序状态。