Skip to content

Commit

Permalink
[WIP] tracer: Show contextual disassembly
Browse files Browse the repository at this point in the history
  • Loading branch information
oleavr committed Sep 22, 2024
1 parent b0b1ff2 commit b8c65a2
Show file tree
Hide file tree
Showing 15 changed files with 615 additions and 204 deletions.
52 changes: 28 additions & 24 deletions agents/tracer/agent.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
const MAX_HANDLERS_PER_REQUEST = 1000;

class Agent {
private handlers = new Map<TraceTargetId, TraceHandler>();
private stagedPlanRequest: TracePlanRequest | null = null;
Expand Down Expand Up @@ -34,6 +36,8 @@ class Agent {
message: e.message
});
});

return Process.mainModule;
}

dispose() {
Expand Down Expand Up @@ -98,6 +102,14 @@ class Agent {
return [...nativeIds, ...javaIds];
}

readMemory(address: string, size: number): ArrayBuffer | null {
try {
return ptr(address).readByteArray(size);
} catch (e) {
return null;
}
}

private cropStagedPlan(plan: TracePlan, id: StagedItemId): TracePlan {
let candidateId: StagedItemId;

Expand Down Expand Up @@ -307,7 +319,8 @@ class Agent {
for (const [name, items] of groups.entries()) {
scopes.push({
name,
members: items.map(item => item[0])
members: items.map(item => item[0]),
addresses: items.map(item => item[1].toString()),
});
this.nextId += items.length;
}
Expand Down Expand Up @@ -727,10 +740,11 @@ async function getHandlers(request: HandlerRequest): Promise<HandlerResponse> {

const { type, flavor, baseId } = request;

const pendingScopes = request.scopes.slice().map(({ name, members }) => {
const pendingScopes = request.scopes.slice().map(({ name, members, addresses }) => {
return {
name,
members: members.slice()
members: members.slice(),
addresses: addresses?.slice(),
};
});
let id = baseId;
Expand All @@ -744,29 +758,17 @@ async function getHandlers(request: HandlerRequest): Promise<HandlerResponse> {
};

let size = 0;
for (const { name, members: pendingMembers } of pendingScopes) {
const curMembers: MemberName[] = [];
for (const { name, members: pendingMembers, addresses: pendingAddresses } of pendingScopes) {
const n = Math.min(pendingMembers.length, MAX_HANDLERS_PER_REQUEST - size);
if (n === 0) {
break;
}
curScopes.push({
name,
members: curMembers
members: pendingMembers.splice(0, n),
addresses: pendingAddresses?.splice(0, n),
});

let exhausted = false;
for (const member of pendingMembers) {
curMembers.push(member);

size++;
if (size === 1000) {
exhausted = true;
break;
}
}

pendingMembers.splice(0, curMembers.length);

if (exhausted) {
break;
}
size += n;
}

while (pendingScopes.length !== 0 && pendingScopes[0].members.length === 0) {
Expand Down Expand Up @@ -965,6 +967,7 @@ interface HandlerRequest {
interface HandlerRequestScope {
name: string;
members: MemberName[];
addresses?: string[];
}
interface HandlerResponse {
scripts: HandlerScript[];
Expand Down Expand Up @@ -993,5 +996,6 @@ rpc.exports = {
dispose: agent.dispose.bind(agent),
update: agent.update.bind(agent),
stageTargets: agent.stageTargets.bind(agent),
commitTargets: agent.commitTargets.bind(agent,)
commitTargets: agent.commitTargets.bind(agent),
readMemory: agent.readMemory.bind(agent),
};
33 changes: 31 additions & 2 deletions apps/tracer/src/App.css
Original file line number Diff line number Diff line change
Expand Up @@ -30,20 +30,49 @@
padding: 5px;
}

.work-area {
.editor-area {
display: flex;
flex: 1;
flex-direction: column;
}

.work-area section {
.editor-area section {
flex: 1;
}

.editor-area .bp5-button:focus {
outline: 0;
}

.monaco-editor {
position: absolute !important;
}

.bottom-tabs {
display: flex;
flex-direction: column;
flex: 1;
}

.bottom-tabs .bp5-tab-list {
padding-left: 5px;
}

.bottom-tabs .bp5-tab:focus {
outline: 0;
}

.bottom-tab-panel {
display: flex;
margin-top: 5px;
flex: 1;
overflow: hidden;
}

.event-view {
flex: 1;
}

.disassembly-view {
flex: 1;
}
Loading

0 comments on commit b8c65a2

Please sign in to comment.