Files
RedHotRoast-ios/HybridCLRData/LocalIl2CppData-OSXEditor/il2cpp/libil2cpp/hybridclr/metadata/PDBImage.h
T
2026-07-17 14:03:00 +08:00

81 lines
2.3 KiB
C++

#pragma once
#include "RawImageBase.h"
namespace hybridclr
{
namespace metadata
{
struct ILMapper
{
uint32_t irOffset;
uint32_t ilOffset;
};
class PDBImage : public RawImageBase
{
public:
PDBImage() : RawImageBase()
{
}
LoadImageErrorCode LoadCLIHeader(uint32_t& entryPointToken, uint32_t& metadataRva, uint32_t& metadataSize) override;
Il2CppString* GetUserStringBlogByIndex(uint32_t index) const override
{
RaiseExecutionEngineException("PDBImage::GetUserStringBlogByIndex Not implemented");
return nullptr;
}
void SetupStackFrameInfo(const MethodInfo* method, const void* ip, Il2CppStackFrameInfo& stackFrame);
void SetMethodDebugInfo(const MethodInfo* method, const il2cpp::utils::dynamic_array<ILMapper>& ilMapper);
private:
struct SymbolDocumentData
{
const char* sourceFiles;
};
struct SymbolSequencePoint
{
uint32_t document;
uint32_t ilOffset;
uint32_t line;
uint32_t column;
uint32_t endLine;
uint32_t endColumn;
};
struct SymbolMethodDefData
{
uint32_t document;
il2cpp::utils::dynamic_array<SymbolSequencePoint> sequencePoints;
};
struct SymbolMethodInfoData
{
SymbolMethodDefData* methodData;
il2cpp::utils::dynamic_array<ILMapper> ilMapper;
};
SymbolMethodDefData* GetMethodDataFromCache(uint32_t methodToken);
static uint32_t FindILOffsetByIROffset(const il2cpp::utils::dynamic_array<ILMapper>& ilMapper, uint32_t irOffset);
static const SymbolSequencePoint* FindSequencePoint(const il2cpp::utils::dynamic_array<SymbolSequencePoint>& sequencePoints, uint32_t ilOffset);
const SymbolDocumentData* GetDocument(uint32_t documentToken);
const char* GetDocumentName(uint32_t documentToken)
{
const SymbolDocumentData* document = GetDocument(documentToken);
return document ? document->sourceFiles : nullptr;
}
typedef Il2CppHashMap<uint32_t, SymbolMethodDefData*, il2cpp::utils::PassThroughHash<uint32_t>> SymbolMethodDataMap;
SymbolMethodDataMap _methods;
typedef Il2CppHashMap<uint32_t, SymbolDocumentData*, il2cpp::utils::PassThroughHash<uint32_t>> SymbolDocumentDataMap;
SymbolDocumentDataMap _documents;
typedef Il2CppHashMap<const MethodInfo*, SymbolMethodInfoData*, il2cpp::utils::PassThroughHash<const MethodInfo*>> SymbolMethodInfoDataMap;
SymbolMethodInfoDataMap _methodInfos;
};
}
}