📄 breakpoint.cs
字号:
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
// <version>$Revision: 1160 $</version>
// </file>
using System;
using System.Collections;
using System.Runtime.InteropServices;
using Debugger.Wrappers.CorDebug;
namespace Debugger
{
public class Breakpoint: RemotingObjectBase
{
NDebugger debugger;
SourcecodeSegment sourcecodeSegment;
bool hadBeenSet = false;
bool enabled = true;
ICorDebugFunctionBreakpoint corBreakpoint;
public NDebugger Debugger {
get {
return debugger;
}
}
public SourcecodeSegment SourcecodeSegment {
get {
return sourcecodeSegment;
}
}
public bool HadBeenSet {
get {
return hadBeenSet;
}
internal set {
hadBeenSet = value;
OnChanged();
}
}
public bool Enabled {
get {
return enabled;
}
set {
enabled = value;
if (HadBeenSet) {
corBreakpoint.Activate(enabled?1:0);
}
OnChanged();
}
}
public event EventHandler<BreakpointEventArgs> Changed;
protected void OnChanged()
{
if (Changed != null) {
Changed(this, new BreakpointEventArgs(this));
}
}
public event EventHandler<BreakpointEventArgs> Hit;
internal void OnHit()
{
if (Hit != null) {
Hit(this, new BreakpointEventArgs(this));
}
}
internal Breakpoint(NDebugger debugger, SourcecodeSegment sourcecodeSegment, bool enabled)
{
this.debugger = debugger;
this.sourcecodeSegment = sourcecodeSegment;
this.enabled = enabled;
}
internal bool Equals(ICorDebugFunctionBreakpoint obj)
{
return corBreakpoint == obj;
}
public override bool Equals(object obj)
{
return base.Equals(obj) || (corBreakpoint != null && corBreakpoint.Equals(obj));
}
public override int GetHashCode()
{
return base.GetHashCode();
}
internal void MarkUnset()
{
HadBeenSet = false;
}
public bool SetBreakpoint()
{
if (hadBeenSet) {
return true;
}
ICorDebugFunction corFunction;
int ilOffset;
if (!sourcecodeSegment.GetFunctionAndOffset(debugger, false, out corFunction, out ilOffset)) {
return false;
}
corBreakpoint = corFunction.ILCode.CreateBreakpoint((uint)ilOffset);
hadBeenSet = true;
corBreakpoint.Activate(enabled?1:0);
OnChanged();
return true;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -