Skip to content

Commit 424db4e

Browse files
committed
checking if clients support memory events
1 parent 57ca56d commit 424db4e

2 files changed

Lines changed: 5 additions & 58 deletions

File tree

src/gdb/GDBDebugSessionBase.ts

Lines changed: 5 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ export abstract class GDBDebugSessionBase extends LoggingDebugSession {
159159

160160
protected supportsRunInTerminalRequest = false;
161161
protected supportsMemoryReferences = false;
162+
protected supportsMemoryEvent = false;
162163
public supportsGdbConsole = false;
163164

164165
/* A reference to the logger to be used by subclasses */
@@ -421,6 +422,7 @@ export abstract class GDBDebugSessionBase extends LoggingDebugSession {
421422
): void {
422423
this.supportsRunInTerminalRequest =
423424
args.supportsRunInTerminalRequest === true;
425+
this.supportsMemoryEvent = args.supportsMemoryEvent === true;
424426
this.supportsMemoryReferences = args.supportsMemoryReferences === true;
425427
this.supportsGdbConsole =
426428
os.platform() === 'linux' && this.supportsRunInTerminalRequest;
@@ -2669,44 +2671,6 @@ export abstract class GDBDebugSessionBase extends LoggingDebugSession {
26692671
})
26702672
).value
26712673
: varobj.value;
2672-
if (this.supportsMemoryReferences) {
2673-
let memoryReferenceResult:
2674-
| MIGDBDataEvaluateExpressionResponse
2675-
| undefined;
2676-
let hasMemoryReference = false;
2677-
try {
2678-
memoryReferenceResult =
2679-
await mi.sendDataEvaluateExpression(
2680-
gdb,
2681-
`&(${varobj.expression})`
2682-
);
2683-
// Depending on the GDBServer being used, sometimes the result of evaluating an address of a symbol returns "<address> <symbol name>"
2684-
if (memoryReferenceResult.value?.includes(' ')) {
2685-
memoryReferenceResult.value =
2686-
memoryReferenceResult.value.split(' ')[0];
2687-
}
2688-
hasMemoryReference = true;
2689-
} catch (err) {
2690-
hasMemoryReference = false;
2691-
}
2692-
const variablesReference =
2693-
parseInt(varobj.numchild, 10) > 0
2694-
? this.variableHandles.create({
2695-
type: 'object',
2696-
frameHandle,
2697-
varobjName: varobj.varname,
2698-
})
2699-
: 0;
2700-
response.body = {
2701-
result,
2702-
type: varobj.type,
2703-
variablesReference,
2704-
memoryReference:
2705-
hasMemoryReference && memoryReferenceResult
2706-
? memoryReferenceResult.value
2707-
: undefined,
2708-
};
2709-
}
27102674
const variablesReference =
27112675
parseInt(varobj.numchild, 10) > 0
27122676
? this.variableHandles.create({
@@ -3352,6 +3316,9 @@ export abstract class GDBDebugSessionBase extends LoggingDebugSession {
33523316
this.handleCmdParamChanged(notifyData);
33533317
break;
33543318
case 'memory-changed': {
3319+
if (!this.supportsMemoryEvent) {
3320+
break;
3321+
}
33553322
let length = 0;
33563323
if (isNaN(notifyData.len)) {
33573324
logger.warn(

src/integration-tests/evaluate.spec.ts

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -531,26 +531,6 @@ describe('evaluate request global variables', function () {
531531
});
532532
expect(evalRes.body.result).to.equal('25');
533533
});
534-
535-
it('response for variables should include memory reference if the expression has an lvalue', async function () {
536-
// Read a global variable using evaluateRequest
537-
const watchRes = await dc.evaluateRequest({
538-
context: 'watch',
539-
expression: 'global_int',
540-
frameId: scope.frame.id,
541-
});
542-
expect(watchRes.body.memoryReference).to.be.a('string');
543-
});
544-
545-
it('response for variables should include memory reference if the expression does not have an lvalue', async function () {
546-
const watchRes = await dc.evaluateRequest({
547-
context: 'watch',
548-
expression: 'global_int + 1',
549-
frameId: scope.frame.id,
550-
});
551-
552-
expect(watchRes.body.memoryReference).to.be.undefined;
553-
});
554534
});
555535

556536
describe('evaluate request - watch local variable across lexical scope transition', function () {

0 commit comments

Comments
 (0)