LLDB  mainline
ProcessMinidump.h
Go to the documentation of this file.
1 //===-- ProcessMinidump.h ---------------------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef LLDB_SOURCE_PLUGINS_PROCESS_MINIDUMP_PROCESSMINIDUMP_H
10 #define LLDB_SOURCE_PLUGINS_PROCESS_MINIDUMP_PROCESSMINIDUMP_H
11 
12 #include "MinidumpParser.h"
13 #include "MinidumpTypes.h"
14 
16 #include "lldb/Target/StopInfo.h"
17 #include "lldb/Target/Target.h"
19 #include "lldb/Utility/Status.h"
20 
21 #include "llvm/Support/Format.h"
22 #include "llvm/Support/raw_ostream.h"
23 
24 
25 namespace lldb_private {
26 
27 namespace minidump {
28 
30 public:
31  static lldb::ProcessSP CreateInstance(lldb::TargetSP target_sp,
32  lldb::ListenerSP listener_sp,
33  const FileSpec *crash_file_path,
34  bool can_connect);
35 
36  static void Initialize();
37 
38  static void Terminate();
39 
40  static llvm::StringRef GetPluginNameStatic() { return "minidump"; }
41 
42  static llvm::StringRef GetPluginDescriptionStatic();
43 
44  ProcessMinidump(lldb::TargetSP target_sp, lldb::ListenerSP listener_sp,
45  const FileSpec &core_file, lldb::DataBufferSP code_data);
46 
47  ~ProcessMinidump() override;
48 
49  bool CanDebug(lldb::TargetSP target_sp,
50  bool plugin_specified_by_name) override;
51 
53 
54  Status DoLoadCore() override;
55 
56  DynamicLoader *GetDynamicLoader() override { return nullptr; }
57 
58  llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }
59 
60  SystemRuntime *GetSystemRuntime() override { return nullptr; }
61 
62  Status DoDestroy() override;
63 
64  void RefreshStateAfterStop() override;
65 
66  bool IsAlive() override;
67 
68  bool WarnBeforeDetach() const override;
69 
70  size_t ReadMemory(lldb::addr_t addr, void *buf, size_t size,
71  Status &error) override;
72 
73  size_t DoReadMemory(lldb::addr_t addr, void *buf, size_t size,
74  Status &error) override;
75 
77 
79  lldb_private::MemoryRegionInfos &region_list) override;
80 
81  bool GetProcessInfo(ProcessInstanceInfo &info) override;
82 
83  Status WillResume() override {
84  Status error;
85  error.SetErrorStringWithFormatv(
86  "error: {0} does not support resuming processes", GetPluginName());
87  return error;
88  }
89 
90  llvm::Optional<MinidumpParser> m_minidump_parser;
91 
92 protected:
93  void Clear();
94 
95  bool DoUpdateThreadList(ThreadList &old_thread_list,
96  ThreadList &new_thread_list) override;
97 
99  MemoryRegionInfo &range_info) override;
100 
101  void ReadModuleList();
102 
103  lldb::ModuleSP GetOrCreateModule(lldb_private::UUID minidump_uuid,
104  llvm::StringRef name,
105  lldb_private::ModuleSpec module_spec);
106 
107  JITLoaderList &GetJITLoaders() override;
108 
109 private:
111  lldb::DataBufferSP m_core_data;
112  llvm::ArrayRef<minidump::Thread> m_thread_list;
113  const minidump::ExceptionStream *m_active_exception;
114  lldb::CommandObjectSP m_command_sp;
116  llvm::Optional<MemoryRegionInfos> m_memory_regions;
117 
118  void BuildMemoryRegions();
119 };
120 
121 } // namespace minidump
122 } // namespace lldb_private
123 
124 #endif // LLDB_SOURCE_PLUGINS_PROCESS_MINIDUMP_PROCESSMINIDUMP_H
lldb_private::ProcessInstanceInfo
Definition: ProcessInfo.h:108
lldb_private::UUID
Definition: UUID.h:23
lldb_private::minidump::ProcessMinidump::m_memory_regions
llvm::Optional< MemoryRegionInfos > m_memory_regions
Definition: ProcessMinidump.h:116
lldb_private::ArchSpec
Definition: ArchSpec.h:33
lldb_private::minidump::ProcessMinidump::GetPluginCommandObject
CommandObject * GetPluginCommandObject() override
Return a multi-word command object that can be used to expose plug-in specific commands.
Definition: ProcessMinidump.cpp:1001
lldb_private::JITLoaderList
Definition: JITLoaderList.h:22
lldb_private::minidump::ProcessMinidump::RefreshStateAfterStop
void RefreshStateAfterStop() override
Currently called as part of ShouldStop.
Definition: ProcessMinidump.cpp:308
lldb_private::minidump::ProcessMinidump::Initialize
static void Initialize()
Definition: ProcessMinidump.cpp:248
lldb_private::minidump::ProcessMinidump::GetPluginDescriptionStatic
static llvm::StringRef GetPluginDescriptionStatic()
Definition: ProcessMinidump.cpp:194
lldb_private::minidump::ProcessMinidump::GetPluginNameStatic
static llvm::StringRef GetPluginNameStatic()
Definition: ProcessMinidump.h:40
lldb_private::minidump::ProcessMinidump::GetJITLoaders
JITLoaderList & GetJITLoaders() override
Definition: ProcessMinidump.cpp:630
MinidumpTypes.h
lldb_private::minidump::ProcessMinidump::BuildMemoryRegions
void BuildMemoryRegions()
Definition: ProcessMinidump.cpp:402
lldb_private::SystemRuntime
Definition: SystemRuntime.h:43
lldb_private::minidump::ProcessMinidump::DoGetMemoryRegionInfo
Status DoGetMemoryRegionInfo(lldb::addr_t load_addr, MemoryRegionInfo &range_info) override
DoGetMemoryRegionInfo is called by GetMemoryRegionInfo after it has removed non address bits from loa...
Definition: ProcessMinidump.cpp:444
lldb_private::MemoryRegionInfo
Definition: MemoryRegionInfo.h:21
lldb_private::minidump::ProcessMinidump::GetOrCreateModule
lldb::ModuleSP GetOrCreateModule(lldb_private::UUID minidump_uuid, llvm::StringRef name, lldb_private::ModuleSpec module_spec)
Definition: ProcessMinidump.cpp:482
lldb_private::minidump::ProcessMinidump::m_core_file
FileSpec m_core_file
Definition: ProcessMinidump.h:110
lldb::addr_t
uint64_t addr_t
Definition: lldb-types.h:83
lldb_private::minidump::ProcessMinidump::GetMemoryRegions
Status GetMemoryRegions(lldb_private::MemoryRegionInfos &region_list) override
Obtain all the mapped memory regions within this process.
Definition: ProcessMinidump.cpp:451
lldb_private::minidump::ProcessMinidump::WillResume
Status WillResume() override
Called before resuming to a process.
Definition: ProcessMinidump.h:83
lldb_private::minidump::ProcessMinidump::m_core_data
lldb::DataBufferSP m_core_data
Definition: ProcessMinidump.h:111
Target.h
lldb_private::minidump::ProcessMinidump::~ProcessMinidump
~ProcessMinidump() override
Definition: ProcessMinidump.cpp:239
lldb_private::FileSpec
Definition: FileSpec.h:56
error
static llvm::raw_ostream & error(Stream &strm)
Definition: CommandReturnObject.cpp:17
MinidumpParser.h
lldb_private::minidump::ProcessMinidump::GetSystemRuntime
SystemRuntime * GetSystemRuntime() override
Get the system runtime plug-in for this process.
Definition: ProcessMinidump.h:60
lldb_private::minidump::ProcessMinidump
Definition: ProcessMinidump.h:29
lldb_private::minidump::ProcessMinidump::Clear
void Clear()
Definition: ProcessMinidump.cpp:457
lldb_private::MemoryRegionInfos
Definition: MemoryRegionInfo.h:172
lldb_private::ThreadList
Definition: ThreadList.h:26
lldb_private::minidump::ProcessMinidump::CreateInstance
static lldb::ProcessSP CreateInstance(lldb::TargetSP target_sp, lldb::ListenerSP listener_sp, const FileSpec *crash_file_path, bool can_connect)
Definition: ProcessMinidump.cpp:198
lldb_private::PostMortemProcess
Definition: PostMortemProcess.h:23
lldb_private::DynamicLoader
Definition: DynamicLoader.h:52
lldb_private::minidump::ProcessMinidump::m_is_wow64
bool m_is_wow64
Definition: ProcessMinidump.h:115
lldb_private::minidump::ProcessMinidump::GetDynamicLoader
DynamicLoader * GetDynamicLoader() override
Get the dynamic loader plug-in for this process.
Definition: ProcessMinidump.h:56
PostMortemProcess.h
lldb_private::minidump::ProcessMinidump::m_thread_list
llvm::ArrayRef< minidump::Thread > m_thread_list
Definition: ProcessMinidump.h:112
lldb_private::CommandObject
Definition: CommandObject.h:67
lldb_private::minidump::ProcessMinidump::DoDestroy
Status DoDestroy() override
Definition: ProcessMinidump.cpp:306
lldb_private::minidump::ProcessMinidump::m_minidump_parser
llvm::Optional< MinidumpParser > m_minidump_parser
Definition: ProcessMinidump.h:90
lldb_private::minidump::ProcessMinidump::DoReadMemory
size_t DoReadMemory(lldb::addr_t addr, void *buf, size_t size, Status &error) override
Actually do the reading of memory from a process.
Definition: ProcessMinidump.cpp:377
lldb_private::ModuleSpec
Definition: ModuleSpec.h:27
lldb_private::Status
Definition: Status.h:44
lldb_private::minidump::ProcessMinidump::DoUpdateThreadList
bool DoUpdateThreadList(ThreadList &old_thread_list, ThreadList &new_thread_list) override
Update the thread list following process plug-in's specific logic.
Definition: ProcessMinidump.cpp:459
lldb_private::minidump::ProcessMinidump::GetArchitecture
ArchSpec GetArchitecture()
Definition: ProcessMinidump.cpp:390
lldb_private::minidump::ProcessMinidump::ReadMemory
size_t ReadMemory(lldb::addr_t addr, void *buf, size_t size, Status &error) override
Read of memory from a process.
Definition: ProcessMinidump.cpp:370
lldb_private::minidump::ProcessMinidump::m_command_sp
lldb::CommandObjectSP m_command_sp
Definition: ProcessMinidump.h:114
lldb_private::minidump::ProcessMinidump::DoLoadCore
Status DoLoadCore() override
Definition: ProcessMinidump.cpp:262
lldb_private::minidump::ProcessMinidump::WarnBeforeDetach
bool WarnBeforeDetach() const override
Before lldb detaches from a process, it warns the user that they are about to lose their debug sessio...
Definition: ProcessMinidump.cpp:368
lldb_private::minidump::ProcessMinidump::ReadModuleList
void ReadModuleList()
Definition: ProcessMinidump.cpp:529
StopInfo.h
lldb_private::minidump::ProcessMinidump::m_active_exception
const minidump::ExceptionStream * m_active_exception
Definition: ProcessMinidump.h:113
lldb_private::minidump::ProcessMinidump::ProcessMinidump
ProcessMinidump(lldb::TargetSP target_sp, lldb::ListenerSP listener_sp, const FileSpec &core_file, lldb::DataBufferSP code_data)
Definition: ProcessMinidump.cpp:231
lldb_private::minidump::ProcessMinidump::GetProcessInfo
bool GetProcessInfo(ProcessInstanceInfo &info) override
Definition: ProcessMinidump.cpp:613
Status.h
lldb_private::minidump::ProcessMinidump::Terminate
static void Terminate()
Definition: ProcessMinidump.cpp:258
lldb_private
A class that represents a running process on the host machine.
Definition: SBCommandInterpreterRunOptions.h:16
ConstString.h
lldb_private::minidump::ProcessMinidump::IsAlive
bool IsAlive() override
Check if a process is still alive.
Definition: ProcessMinidump.cpp:366
lldb_private::minidump::ProcessMinidump::GetPluginName
llvm::StringRef GetPluginName() override
Definition: ProcessMinidump.h:58
lldb_private::minidump::ProcessMinidump::CanDebug
bool CanDebug(lldb::TargetSP target_sp, bool plugin_specified_by_name) override
Check if a plug-in instance can debug the file in module.
Definition: ProcessMinidump.cpp:226