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}
91 lines
3.5 KiB
C++
91 lines
3.5 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.
|
|
|
|
#ifndef V8_TOOLS_V8WINDBG_TEST_DEBUG_CALLBACKS_H_
|
|
#define V8_TOOLS_V8WINDBG_TEST_DEBUG_CALLBACKS_H_
|
|
|
|
#if !defined(UNICODE) || !defined(_UNICODE)
|
|
#error Unicode not defined
|
|
#endif
|
|
|
|
#include <DbgEng.h>
|
|
#include <DbgModel.h>
|
|
#include <Windows.h>
|
|
#include <crtdbg.h>
|
|
#include <pathcch.h>
|
|
#include <wrl/client.h>
|
|
|
|
#include <string>
|
|
|
|
namespace WRL = Microsoft::WRL;
|
|
|
|
namespace v8 {
|
|
namespace internal {
|
|
namespace v8windbg_test {
|
|
|
|
class MyOutput : public IDebugOutputCallbacks {
|
|
public:
|
|
MyOutput(WRL::ComPtr<IDebugClient5> p_client);
|
|
~MyOutput();
|
|
MyOutput(const MyOutput&) = delete;
|
|
MyOutput& operator=(const MyOutput&) = delete;
|
|
|
|
// Inherited via IDebugOutputCallbacks
|
|
HRESULT __stdcall QueryInterface(REFIID InterfaceId,
|
|
PVOID* Interface) override;
|
|
ULONG __stdcall AddRef(void) override;
|
|
ULONG __stdcall Release(void) override;
|
|
HRESULT __stdcall Output(ULONG Mask, PCSTR Text) override;
|
|
|
|
const std::string& GetLog() const { return log_; }
|
|
void ClearLog() { log_.clear(); }
|
|
|
|
private:
|
|
WRL::ComPtr<IDebugClient5> p_client_;
|
|
std::string log_;
|
|
};
|
|
|
|
// For return values, see:
|
|
// https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/debug-status-xxx
|
|
class MyCallback : public IDebugEventCallbacks {
|
|
public:
|
|
// Inherited via IDebugEventCallbacks
|
|
HRESULT __stdcall QueryInterface(REFIID InterfaceId,
|
|
PVOID* Interface) override;
|
|
ULONG __stdcall AddRef(void) override;
|
|
ULONG __stdcall Release(void) override;
|
|
HRESULT __stdcall GetInterestMask(PULONG Mask) override;
|
|
HRESULT __stdcall Breakpoint(PDEBUG_BREAKPOINT Bp) override;
|
|
HRESULT __stdcall Exception(PEXCEPTION_RECORD64 Exception,
|
|
ULONG FirstChance) override;
|
|
HRESULT __stdcall CreateThread(ULONG64 Handle, ULONG64 DataOffset,
|
|
ULONG64 StartOffset) override;
|
|
HRESULT __stdcall ExitThread(ULONG ExitCode) override;
|
|
HRESULT __stdcall ExitProcess(ULONG ExitCode) override;
|
|
HRESULT __stdcall LoadModule(ULONG64 ImageFileHandle, ULONG64 BaseOffset,
|
|
ULONG ModuleSize, PCSTR ModuleName,
|
|
PCSTR ImageName, ULONG CheckSum,
|
|
ULONG TimeDateStamp) override;
|
|
HRESULT __stdcall UnloadModule(PCSTR ImageBaseName,
|
|
ULONG64 BaseOffset) override;
|
|
HRESULT __stdcall SystemError(ULONG Error, ULONG Level) override;
|
|
HRESULT __stdcall SessionStatus(ULONG Status) override;
|
|
HRESULT __stdcall ChangeDebuggeeState(ULONG Flags, ULONG64 Argument) override;
|
|
HRESULT __stdcall ChangeEngineState(ULONG Flags, ULONG64 Argument) override;
|
|
HRESULT __stdcall ChangeSymbolState(ULONG Flags, ULONG64 Argument) override;
|
|
HRESULT __stdcall CreateProcessW(ULONG64 ImageFileHandle, ULONG64 Handle,
|
|
ULONG64 BaseOffset, ULONG ModuleSize,
|
|
PCSTR ModuleName, PCSTR ImageName,
|
|
ULONG CheckSum, ULONG TimeDateStamp,
|
|
ULONG64 InitialThreadHandle,
|
|
ULONG64 ThreadDataOffset,
|
|
ULONG64 StartOffset) override;
|
|
};
|
|
|
|
} // namespace v8windbg_test
|
|
} // namespace internal
|
|
} // namespace v8
|
|
|
|
#endif // V8_TOOLS_V8WINDBG_TEST_DEBUG_CALLBACKS_H_
|