Skip to content

Commit 95309e8

Browse files
committed
Added debugging.
1 parent 8420ff8 commit 95309e8

File tree

2 files changed

+57
-1
lines changed

2 files changed

+57
-1
lines changed

Hexa.NET.ImGui.Widgets/Dialogs/FileUtilities.cs

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,14 @@
33
using Hexa.NET.Utilities;
44
using System;
55
using System.Collections.Generic;
6+
using System.Diagnostics;
7+
using System.Diagnostics.CodeAnalysis;
68
using System.IO;
9+
using System.Reflection;
710
using System.Runtime.CompilerServices;
811
using System.Runtime.InteropServices;
912
using System.Text;
13+
using static System.Runtime.InteropServices.JavaScript.JSType;
1014
using Utils = HexaGen.Runtime.Utils;
1115

1216
public static unsafe partial class FileUtilities
@@ -124,6 +128,7 @@ private static nint StartSearch(StdWString st, out WIN32_FIND_DATA data)
124128
[MethodImpl(MethodImplOptions.AggressiveInlining)]
125129
private static FileMetadata Convert(WIN32_FIND_DATA data, StdWString path)
126130
{
131+
Dump(&data);
127132
FileMetadata metadata = new();
128133
int length = StrLen(data.cFileName);
129134
StdWString str = new(length + path.Size + 1);
@@ -534,6 +539,7 @@ private static bool TryReadDir(nint dirHandle, out DirEnt dirEnt)
534539

535540
private static FileMetadata Convert(DirEnt entry, StdString path)
536541
{
542+
Dump(&entry);
537543
int length = NET.Utilities.Utils.StrLen(entry.d_name);
538544
StdWString str = new(path.Size + length);
539545
str.Append(path);
@@ -551,6 +557,56 @@ private static FileMetadata Convert(DirEnt entry, StdString path)
551557
return meta;
552558
}
553559

560+
[RequiresDynamicCode("")]
561+
public static void Dump<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields)] T>(T* ptr) where T : unmanaged
562+
{
563+
byte* p = (byte*)ptr;
564+
int sizeInBytes = sizeof(T);
565+
Type type = typeof(T);
566+
FieldInfo[] fields = type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
567+
(FieldInfo info, int offset, int size)[] offsetData = new (FieldInfo info, int offset, int size)[fields.Length];
568+
569+
int currentOffset = 0;
570+
for (int j = 0; j < fields.Length; j++)
571+
{
572+
FieldInfo field = fields[j];
573+
int size = Marshal.SizeOf(field.FieldType);
574+
offsetData[j] = (field, currentOffset, size);
575+
Console.WriteLine($"Field: {field.Name}, Offset: {currentOffset:X8}, Size: {size}, Type: {field.FieldType}");
576+
currentOffset += size;
577+
578+
}
579+
580+
int startInfo = 0;
581+
for (int i = 0; i < sizeInBytes; i++)
582+
{
583+
(FieldInfo info, int offset, int size)? info = default;
584+
for (int k = startInfo; k < offsetData.Length; k++)
585+
{
586+
var x = offsetData[k];
587+
if (x.offset == i)
588+
{
589+
startInfo = k;
590+
info = x;
591+
break;
592+
}
593+
if (x.offset > i)
594+
{
595+
break;
596+
}
597+
}
598+
if (info.HasValue)
599+
{
600+
Console.WriteLine($"{((nint)p + i):X8}: {p[i]:X} : {info.Value.info.Name} {info.Value.size}");
601+
}
602+
else
603+
{
604+
Console.WriteLine($"{((nint)p + i):X8}: {p[i]:X}");
605+
}
606+
607+
}
608+
}
609+
554610
private static void FileStat(StdWString str, out Stat stat)
555611
{
556612
int strSize0 = Encoding.UTF8.GetByteCount(str.Data, str.Size);

TestApp/TestApp.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<OutputType>WinExe</OutputType>
4+
<OutputType>Exe</OutputType>
55
<TargetFramework>net8.0</TargetFramework>
66
<ImplicitUsings>enable</ImplicitUsings>
77
<Nullable>enable</Nullable>

0 commit comments

Comments
 (0)