
This patch introduces Scripted Processes to lldb. The goal, here, is to be able to attach in the debugger to fake processes that are backed by script files (in Python, Lua, Swift, etc ...) and inspect them statically. Scripted Processes can be used in cooperative multithreading environments like the XNU Kernel or other real-time operating systems, but it can also help us improve the debugger testing infrastructure by writting synthetic tests that simulates hard-to-reproduce process/thread states. Although ScriptedProcess is not feature-complete at the moment, it has basic execution capabilities and will improve in the following patches. rdar://65508855 Differential Revision: https://reviews.llvm.org/D100384 Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
66 lines
2.1 KiB
C++
66 lines
2.1 KiB
C++
//===-- ScriptedProcessPythonInterface.h ------------------------*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLDB_PLUGINS_SCRIPTINTERPRETER_PYTHON_SCRIPTEDPROCESSPYTHONINTERFACE_H
|
|
#define LLDB_PLUGINS_SCRIPTINTERPRETER_PYTHON_SCRIPTEDPROCESSPYTHONINTERFACE_H
|
|
|
|
#include "lldb/Host/Config.h"
|
|
|
|
#if LLDB_ENABLE_PYTHON
|
|
|
|
#include "lldb/Interpreter/ScriptedProcessInterface.h"
|
|
|
|
namespace lldb_private {
|
|
class ScriptInterpreterPythonImpl;
|
|
class ScriptedProcessPythonInterface : public ScriptedProcessInterface {
|
|
public:
|
|
ScriptedProcessPythonInterface(ScriptInterpreterPythonImpl &interpreter)
|
|
: ScriptedProcessInterface(), m_interpreter(interpreter) {}
|
|
|
|
StructuredData::GenericSP
|
|
CreatePluginObject(const llvm::StringRef class_name, lldb::TargetSP target_sp,
|
|
StructuredData::DictionarySP args_sp) override;
|
|
|
|
Status Launch() override;
|
|
|
|
Status Resume() override;
|
|
|
|
bool ShouldStop() override;
|
|
|
|
Status Stop() override;
|
|
|
|
lldb::MemoryRegionInfoSP
|
|
GetMemoryRegionContainingAddress(lldb::addr_t address) override;
|
|
|
|
StructuredData::DictionarySP GetThreadWithID(lldb::tid_t tid) override;
|
|
|
|
StructuredData::DictionarySP GetRegistersForThread(lldb::tid_t tid) override;
|
|
|
|
lldb::DataExtractorSP ReadMemoryAtAddress(lldb::addr_t address, size_t size,
|
|
Status &error) override;
|
|
|
|
StructuredData::DictionarySP GetLoadedImages() override;
|
|
|
|
lldb::pid_t GetProcessID() override;
|
|
|
|
bool IsAlive() override;
|
|
|
|
protected:
|
|
size_t GetGenericInteger(llvm::StringRef method_name);
|
|
Status GetStatusFromMethod(llvm::StringRef method_name);
|
|
|
|
private:
|
|
// The lifetime is managed by the ScriptInterpreter
|
|
ScriptInterpreterPythonImpl &m_interpreter;
|
|
StructuredData::GenericSP m_object_instance_sp;
|
|
};
|
|
} // namespace lldb_private
|
|
|
|
#endif // LLDB_ENABLE_PYTHON
|
|
#endif // LLDB_PLUGINS_SCRIPTINTERPRETER_PYTHON_SCRIPTEDPROCESSPYTHONINTERFACE_H
|