Skip to content

Commit 705c51b

Browse files
committed
fix AD7MemoryAddress.GetInfo
1 parent 59c8b02 commit 705c51b

File tree

3 files changed

+17
-10
lines changed

3 files changed

+17
-10
lines changed

src/MIDebugEngine/AD7.Impl/AD7MemoryAddress.cs

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ public void SetDocumentContext(IDebugDocumentContext2 docContext)
3939
// Adds a specified value to the current context's address to create a new context.
4040
public int Add(ulong dwCount, out IDebugMemoryContext2 newAddress)
4141
{
42-
// FIXME: this is not correct for IDebugCodeContext2
42+
// NB: this is not correct for IDebugCodeContext2 according to the docs
43+
// https://docs.microsoft.com/en-us/visualstudio/extensibility/debugger/reference/idebugcodecontext2#remarks
44+
// But it's not used in practice (instead: IDebugDisassemblyStream2.Seek)
4345
newAddress = new AD7MemoryAddress(_engine, (uint)dwCount + _address, null);
4446
return Constants.S_OK;
4547
}
@@ -158,12 +160,19 @@ public int GetInfo(enum_CONTEXT_INFO_FIELDS dwFields, CONTEXT_INFO[] pinfo)
158160
{
159161
pinfo[0].dwFields = 0;
160162

161-
if ((dwFields & enum_CONTEXT_INFO_FIELDS.CIF_ADDRESS) != 0 ||
162-
(dwFields & enum_CONTEXT_INFO_FIELDS.CIF_ADDRESSABSOLUTE) != 0)
163+
if ((dwFields & (enum_CONTEXT_INFO_FIELDS.CIF_ADDRESS | enum_CONTEXT_INFO_FIELDS.CIF_ADDRESSABSOLUTE)) != 0)
163164
{
164-
pinfo[0].bstrAddress = EngineUtils.AsAddr(_address, _engine.DebuggedProcess.Is64BitArch);
165-
pinfo[0].bstrAddressAbsolute = pinfo[0].bstrAddress;
166-
pinfo[0].dwFields |= enum_CONTEXT_INFO_FIELDS.CIF_ADDRESS | enum_CONTEXT_INFO_FIELDS.CIF_ADDRESSABSOLUTE;
165+
string addr = EngineUtils.AsAddr(_address, _engine.DebuggedProcess.Is64BitArch);
166+
if ((dwFields & enum_CONTEXT_INFO_FIELDS.CIF_ADDRESS) != 0)
167+
{
168+
pinfo[0].bstrAddress = addr;
169+
pinfo[0].dwFields |= enum_CONTEXT_INFO_FIELDS.CIF_ADDRESS;
170+
}
171+
if ((dwFields & enum_CONTEXT_INFO_FIELDS.CIF_ADDRESSABSOLUTE) != 0)
172+
{
173+
pinfo[0].bstrAddressAbsolute = addr;
174+
pinfo[0].dwFields |= enum_CONTEXT_INFO_FIELDS.CIF_ADDRESSABSOLUTE;
175+
}
167176
}
168177
// Fields not supported by the sample
169178
if ((dwFields & enum_CONTEXT_INFO_FIELDS.CIF_ADDRESSOFFSET) != 0) { }

src/OpenDebugAD7/AD7Impl/AD7BreakPointRequest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
namespace OpenDebugAD7.AD7Impl
1010
{
11-
internal class AD7BreakPointRequest : IDebugBreakpointRequest2, IDebugBreakpointChecksumRequest2
11+
internal sealed class AD7BreakPointRequest : IDebugBreakpointRequest2, IDebugBreakpointChecksumRequest2
1212
{
1313
private static uint s_nextBreakpointId = 0;
1414

src/OpenDebugAD7/AD7Impl/AD7DocumentPosition.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,11 @@
22
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
33

44
using System;
5-
using System.Globalization;
6-
using Microsoft.DebugEngineHost;
75
using Microsoft.VisualStudio.Debugger.Interop;
86

97
namespace OpenDebugAD7.AD7Impl
108
{
11-
internal class AD7DocumentPosition : IDebugDocumentPosition2, IDebugDocumentPosition110
9+
internal sealed class AD7DocumentPosition : IDebugDocumentPosition2, IDebugDocumentPosition110
1210
{
1311
public string Path
1412
{

0 commit comments

Comments
 (0)