| // Copyright 2018 The Fuchsia 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 SRC_SYS_APPMGR_DEBUG_INFO_RETRIEVER_H_ |
| #define SRC_SYS_APPMGR_DEBUG_INFO_RETRIEVER_H_ |
| |
| #include <lib/fit/function.h> |
| #include <lib/zx/process.h> |
| #include <lib/zx/thread.h> |
| |
| #include <fbl/string.h> |
| #include <fbl/string_printf.h> |
| #include <inspector/inspector.h> |
| |
| #include "src/lib/files/file.h" |
| |
| namespace component { |
| |
| struct DsoListWrapper { |
| DsoListWrapper(const zx::process& process) { info = inspector_dso_fetch_list(process.get()); } |
| ~DsoListWrapper() { |
| if (info) { |
| inspector_dso_free_list(info); |
| info = nullptr; |
| } |
| } |
| inspector_dsoinfo_t* info = nullptr; |
| }; |
| |
| class DebugInfoRetriever { |
| public: |
| // Retrieve stack traces for threads in the given process. |
| // If thread_ids is not null, it must be an array of thread object ids of size |
| // num to output. If thread_ids is null, all threads in the process will be |
| // fetched and output. |
| static fbl::String GetInfo(const zx::process* process, zx_koid_t* thread_ids = nullptr, |
| size_t num = 0); |
| |
| private: |
| static constexpr int kMaxThreads = 1024; |
| }; |
| |
| } // namespace component |
| |
| #endif // SRC_SYS_APPMGR_DEBUG_INFO_RETRIEVER_H_ |