af76dd6e7e
Please take a look at tools/v8windbg/README.md for an overview of what v8windbg can do and how it's structured. This platform-specific debugging plugin makes use of the data provided by the V8 postmortem debugging API in tools/debug_helper. Note: This code began as https://github.com/billti/v8dbg and then moved into the Edge repository, where I added features gradually and got code reviews for individual changes. Now, taken in its entirety, it's an obnoxiously large CL. I'm open to breaking it up into a few chunks if that would be preferable. Bug: v8:9376 Change-Id: I3e503de00bb1aea870ae83e9bd99e4e2eab9ef98 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2031700 Reviewed-by: Michael Stanton <mvstanton@chromium.org> Reviewed-by: Tamer Tas <tmrts@chromium.org> Reviewed-by: Tobias Tebbi <tebbi@chromium.org> Commit-Queue: Seth Brenith <seth.brenith@microsoft.com> Cr-Commit-Position: refs/heads/master@{#66319}
95 lines
3.4 KiB
C++
95 lines
3.4 KiB
C++
// Copyright 2020 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "tools/v8windbg/test/debug-callbacks.h"
|
|
|
|
namespace v8 {
|
|
namespace internal {
|
|
namespace v8windbg_test {
|
|
|
|
MyOutput::MyOutput(WRL::ComPtr<IDebugClient5> p_client) : p_client_(p_client) {
|
|
p_client_->SetOutputCallbacks(this);
|
|
}
|
|
|
|
MyOutput::~MyOutput() { p_client_->SetOutputCallbacks(nullptr); }
|
|
|
|
HRESULT __stdcall MyOutput::QueryInterface(REFIID InterfaceId,
|
|
PVOID* Interface) {
|
|
return E_NOTIMPL;
|
|
}
|
|
ULONG __stdcall MyOutput::AddRef(void) { return 0; }
|
|
ULONG __stdcall MyOutput::Release(void) { return 0; }
|
|
HRESULT __stdcall MyOutput::Output(ULONG Mask, PCSTR Text) {
|
|
if (Mask & DEBUG_OUTPUT_NORMAL) {
|
|
log_ += Text;
|
|
}
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT __stdcall MyCallback::QueryInterface(REFIID InterfaceId,
|
|
PVOID* Interface) {
|
|
return E_NOTIMPL;
|
|
}
|
|
ULONG __stdcall MyCallback::AddRef(void) { return S_OK; }
|
|
ULONG __stdcall MyCallback::Release(void) { return S_OK; }
|
|
HRESULT __stdcall MyCallback::GetInterestMask(PULONG Mask) {
|
|
*Mask = DEBUG_EVENT_BREAKPOINT | DEBUG_EVENT_CREATE_PROCESS;
|
|
return S_OK;
|
|
}
|
|
HRESULT __stdcall MyCallback::Breakpoint(PDEBUG_BREAKPOINT Bp) {
|
|
ULONG64 bp_offset;
|
|
HRESULT hr = Bp->GetOffset(&bp_offset);
|
|
if (FAILED(hr)) return hr;
|
|
|
|
// Break on breakpoints? Seems reasonable.
|
|
return DEBUG_STATUS_BREAK;
|
|
}
|
|
HRESULT __stdcall MyCallback::Exception(PEXCEPTION_RECORD64 Exception,
|
|
ULONG FirstChance) {
|
|
return E_NOTIMPL;
|
|
}
|
|
HRESULT __stdcall MyCallback::CreateThread(ULONG64 Handle, ULONG64 DataOffset,
|
|
ULONG64 StartOffset) {
|
|
return E_NOTIMPL;
|
|
}
|
|
HRESULT __stdcall MyCallback::ExitThread(ULONG ExitCode) { return E_NOTIMPL; }
|
|
HRESULT __stdcall MyCallback::ExitProcess(ULONG ExitCode) { return E_NOTIMPL; }
|
|
HRESULT __stdcall MyCallback::LoadModule(ULONG64 ImageFileHandle,
|
|
ULONG64 BaseOffset, ULONG ModuleSize,
|
|
PCSTR ModuleName, PCSTR ImageName,
|
|
ULONG CheckSum, ULONG TimeDateStamp) {
|
|
return E_NOTIMPL;
|
|
}
|
|
HRESULT __stdcall MyCallback::UnloadModule(PCSTR ImageBaseName,
|
|
ULONG64 BaseOffset) {
|
|
return E_NOTIMPL;
|
|
}
|
|
HRESULT __stdcall MyCallback::SystemError(ULONG Error, ULONG Level) {
|
|
return E_NOTIMPL;
|
|
}
|
|
HRESULT __stdcall MyCallback::SessionStatus(ULONG Status) { return E_NOTIMPL; }
|
|
HRESULT __stdcall MyCallback::ChangeDebuggeeState(ULONG Flags,
|
|
ULONG64 Argument) {
|
|
return E_NOTIMPL;
|
|
}
|
|
HRESULT __stdcall MyCallback::ChangeEngineState(ULONG Flags, ULONG64 Argument) {
|
|
return E_NOTIMPL;
|
|
}
|
|
HRESULT __stdcall MyCallback::ChangeSymbolState(ULONG Flags, ULONG64 Argument) {
|
|
return E_NOTIMPL;
|
|
}
|
|
HRESULT __stdcall MyCallback::CreateProcessW(
|
|
ULONG64 ImageFileHandle, ULONG64 Handle, ULONG64 BaseOffset,
|
|
ULONG ModuleSize, PCSTR ModuleName, PCSTR ImageName, ULONG CheckSum,
|
|
ULONG TimeDateStamp, ULONG64 InitialThreadHandle, ULONG64 ThreadDataOffset,
|
|
ULONG64 StartOffset) {
|
|
// Should fire once the target process is launched. Break to create
|
|
// breakpoints, etc.
|
|
return DEBUG_STATUS_BREAK;
|
|
}
|
|
|
|
} // namespace v8windbg_test
|
|
} // namespace internal
|
|
} // namespace v8
|