📄 module.cs
字号:
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
// <version>$Revision: 1248 $</version>
// </file>
using System;
using System.IO;
using System.Runtime.InteropServices;
using Debugger.Wrappers.CorDebug;
using Debugger.Wrappers.CorSym;
using Debugger.Wrappers.MetaData;
namespace Debugger
{
public class Module: RemotingObjectBase, IDisposable
{
NDebugger debugger;
bool unloaded = false;
string fullPath;
int orderOfLoading = 0;
ICorDebugModule corModule;
ISymUnmanagedReader symReader;
MetaData metaData;
public NDebugger Debugger {
get {
return debugger;
}
}
internal MetaData MetaData {
get {
return metaData;
}
}
public bool Unloaded {
get {
return unloaded;
}
}
public ISymUnmanagedReader SymReader {
get {
return symReader;
}
}
public ICorDebugModule CorModule {
get {
return corModule;
}
}
public ulong BaseAdress {
get {
return corModule.BaseAddress;
}
}
public bool IsDynamic {
get {
return corModule.IsDynamic == 1;
}
}
public bool IsInMemory {
get {
return corModule.IsInMemory == 1;
}
}
public string FullPath {
get {
return fullPath;
}
}
public string Filename {
get {
if (IsDynamic || IsInMemory) return String.Empty;
return System.IO.Path.GetFileName(FullPath);
}
}
public string DirectoryName {
get {
if (IsDynamic || IsInMemory) return String.Empty;
return System.IO.Path.GetDirectoryName(FullPath);
}
}
public bool SymbolsLoaded {
get {
return symReader != null;
}
}
public int OrderOfLoading {
get {
return orderOfLoading;
}
set {
orderOfLoading = value;
}
}
public bool JMCStatus {
set {
uint unused = 0;
if (corModule.Is<ICorDebugModule2>()) { // Is the debuggee .NET 2.0?
(corModule.CastTo<ICorDebugModule2>()).SetJMCStatus(value?1:0, 0, ref unused);
}
}
}
internal Module(NDebugger debugger, ICorDebugModule pModule)
{
this.debugger = debugger;
corModule = pModule;
metaData = new MetaData(pModule);
fullPath = pModule.Name;
symReader = metaData.GetSymReader(fullPath, null);
JMCStatus = SymbolsLoaded;
}
public void ApplyChanges(byte[] metadata, byte[] il)
{
if (corModule.Is<ICorDebugModule2>()) { // Is the debuggee .NET 2.0?
(corModule.CastTo<ICorDebugModule2>()).ApplyChanges((uint)metadata.Length, metadata, (uint)il.Length, il);
}
}
public void Dispose()
{
metaData.Dispose();
if (symReader != null) {
symReader.As<ISymUnmanagedDispose>().Destroy();
}
unloaded = true;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -