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:
@@ -719,7 +719,23 @@ public unsafe struct HashMapHelper<TKey> : IDisposable
|
|||||||
{
|
{
|
||||||
if (!IsCreated)
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -273,7 +273,23 @@ public unsafe struct UnTypedArray : IUnTypedCollection
|
|||||||
{
|
{
|
||||||
if (!IsCreated)
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -418,7 +418,23 @@ public unsafe struct UnsafeArray<T> : IUnsafeCollection<T>
|
|||||||
{
|
{
|
||||||
if (!IsCreated)
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||||
<Authors>Misaki</Authors>
|
<Authors>Misaki</Authors>
|
||||||
<AssemblyVersion>1.6.4</AssemblyVersion>
|
<AssemblyVersion>1.6.5</AssemblyVersion>
|
||||||
<Version>$(AssemblyVersion)</Version>
|
<Version>$(AssemblyVersion)</Version>
|
||||||
<PackageProjectUrl>https://git.personalnas.com/Misaki/Misaki.HighPerformance.git</PackageProjectUrl>
|
<PackageProjectUrl>https://git.personalnas.com/Misaki/Misaki.HighPerformance.git</PackageProjectUrl>
|
||||||
<RepositoryUrl>https://git.personalnas.com/Misaki/Misaki.HighPerformance.git</RepositoryUrl>
|
<RepositoryUrl>https://git.personalnas.com/Misaki/Misaki.HighPerformance.git</RepositoryUrl>
|
||||||
|
|||||||
Reference in New Issue
Block a user