feat(dispose): add detailed debug output with stack trace

Enhanced Dispose() in HashMapHelper, UnTypedArray, and UnsafeArray<T> to provide more informative debug messages when called on uninitialized or already disposed objects. When MHP_ENABLE_STACKTRACE is defined, the debug output now includes a stack trace with file, type, method, and line number details.

Also incremented project version to 1.6.5.
This commit is contained in:
2026-04-02 19:34:36 +09:00
parent 78c565e428
commit 730bc664ac
4 changed files with 52 additions and 4 deletions

View File

@@ -719,7 +719,23 @@ public unsafe struct HashMapHelper<TKey> : IDisposable
{
if (!IsCreated)
{
Debug.Fail("The UnsafeArray is not created or already disposed.");
var message = "The HashMapHelper is not created or already disposed.";
#if MHP_ENABLE_STACKTRACE
var stackTrace = new StackTrace(1, true);
var sb = new System.Text.StringBuilder();
foreach (var frame in stackTrace.GetFrames())
{
var fileName = frame?.GetFileName();
if (frame != null)
{
var methodInfo = DiagnosticMethodInfo.Create(frame);
sb.AppendLine($"File: {fileName}, Type: {methodInfo?.DeclaringTypeName}, Method: {methodInfo?.Name}, Line: {frame.GetFileLineNumber()}");
}
}
message += Environment.NewLine + sb.ToString();
#endif
Debug.WriteLine(message);
return;
}

View File

@@ -273,7 +273,23 @@ public unsafe struct UnTypedArray : IUnTypedCollection
{
if (!IsCreated)
{
Debug.Fail("The UnsafeArray is not created or already disposed.");
var message = "The UnTypedArray is not created or already disposed.";
#if MHP_ENABLE_STACKTRACE
var stackTrace = new StackTrace(1, true);
var sb = new System.Text.StringBuilder();
foreach (var frame in stackTrace.GetFrames())
{
var fileName = frame?.GetFileName();
if (frame != null)
{
var methodInfo = DiagnosticMethodInfo.Create(frame);
sb.AppendLine($"File: {fileName}, Type: {methodInfo?.DeclaringTypeName}, Method: {methodInfo?.Name}, Line: {frame.GetFileLineNumber()}");
}
}
message += Environment.NewLine + sb.ToString();
#endif
Debug.WriteLine(message);
return;
}

View File

@@ -418,7 +418,23 @@ public unsafe struct UnsafeArray<T> : IUnsafeCollection<T>
{
if (!IsCreated)
{
Debug.Fail("The UnsafeArray is not created or already disposed.");
var message = "The UnsafeArray is not created or already disposed.";
#if MHP_ENABLE_STACKTRACE
var stackTrace = new StackTrace(1, true);
var sb = new System.Text.StringBuilder();
foreach (var frame in stackTrace.GetFrames())
{
var fileName = frame?.GetFileName();
if (frame != null)
{
var methodInfo = DiagnosticMethodInfo.Create(frame);
sb.AppendLine($"File: {fileName}, Type: {methodInfo?.DeclaringTypeName}, Method: {methodInfo?.Name}, Line: {frame.GetFileLineNumber()}");
}
}
message += Environment.NewLine + sb.ToString();
#endif
Debug.WriteLine(message);
return;
}