From ac836a67014c739ee3716d5ddca7ccde29ec8d8b Mon Sep 17 00:00:00 2001 From: JustLonding <874922263@qq.com> Date: Thu, 13 Mar 2025 19:03:06 +0800 Subject: [PATCH 1/2] c Signed-off-by: JustLonding <874922263@qq.com> --- .../child_process/native_child_process.h | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/ability/ability_runtime/child_process/native_child_process.h b/ability/ability_runtime/child_process/native_child_process.h index 283710400..ac84d5aba 100644 --- a/ability/ability_runtime/child_process/native_child_process.h +++ b/ability/ability_runtime/child_process/native_child_process.h @@ -34,12 +34,9 @@ * @syscap SystemCapability.Ability.AbilityRuntime.Core * @since 12 */ - #ifndef OHOS_ABILITY_RUNTIME_C_NATIVE_CHILD_PROCESS_H #define OHOS_ABILITY_RUNTIME_C_NATIVE_CHILD_PROCESS_H - #include "IPCKit/ipc_cparcel.h" - #ifdef __cplusplus extern "C" { #endif @@ -110,10 +107,9 @@ typedef enum Ability_NativeChildProcess_ErrCode { * @error The child process fails to call the OnConnect method of the dynamic library. * An invalid IPC object pointer may be returned. */ - NCP_ERR_CONNECTION_FAILED = 16010008, + NCP_ERR_CONNECTION_FAILED = 16010008 } Ability_NativeChildProcess_ErrCode; - /** * @brief Defines a callback function for notifying the child process startup result. * @@ -212,7 +208,7 @@ typedef enum NativeChildProcess_IsolationMode { /** * Isolated mode, parent process does not share the same sandbox or internet with the child process. */ - NCP_ISOLATION_MODE_ISOLATED = 1, + NCP_ISOLATION_MODE_ISOLATED = 1 } NativeChildProcess_IsolationMode; /** @@ -287,10 +283,9 @@ Ability_NativeChildProcess_ErrCode OH_Ability_StartNativeChildProcess( * @since 16 */ NativeChildProcess_Args* OH_Ability_GetCurrentChildProcessArgs(); - #ifdef __cplusplus } // extern "C" #endif /** @} */ -#endif // OHOS_ABILITY_RUNTIME_C_NATIVE_CHILD_PROCESS_H +#endif // OHOS_ABILITY_RUNTIME_C_NATIVE_CHILD_PROCESS_H \ No newline at end of file -- Gitee From 244042d1e4d8a347bcfe01120d64e534f77407ab Mon Sep 17 00:00:00 2001 From: JustLonding <874922263@qq.com> Date: Thu, 24 Apr 2025 16:25:32 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: JustLonding <874922263@qq.com> --- hiviewdfx/hidebug/include/hidebug/hidebug.h | 79 +++++++++- .../hidebug/include/hidebug/hidebug_type.h | 144 +++++++++++++++++- 2 files changed, 221 insertions(+), 2 deletions(-) diff --git a/hiviewdfx/hidebug/include/hidebug/hidebug.h b/hiviewdfx/hidebug/include/hidebug/hidebug.h index d7cc123d1..af13303f7 100644 --- a/hiviewdfx/hidebug/include/hidebug/hidebug.h +++ b/hiviewdfx/hidebug/include/hidebug/hidebug.h @@ -145,15 +145,92 @@ HiDebug_ErrorCode OH_HiDebug_StopAppTraceCapture(); * @param value Indicates value of graphics memory, in kibibytes. * @return Result code * {@link HIDEBUG_SUCCESS} Get graphics memory success. - * {@link HIDEBUG_INVALID_ARGUMENT} Invalid argument,value is null. + * {@link HIDEBUG_INVALID_ARGUMENT} Invalid argument£¬value is null. * {@link HIDEBUG_TRACE_ABNORMAL} Failed to get the application memory due to a remote exception. * @since 14 */ HiDebug_ErrorCode OH_HiDebug_GetGraphicsMemory(uint32_t *value); +/** + * @brief Get backtrace frames start from the given frame pointer and the function is signal-safe. + * + * @param object The backtrace object create by {@link OH_HiDebug_CreateBacktraceObject}. + * @param startfp The entry frame pointer. + * @param array The array to place program counter values. + * @param size The size of the array to place program counter values. + * @return The number of stack frames written to array. + * @since 20 + */ +int OH_HiDebug_BacktraceFromFp(BacktraceObject object, void* startFp, void** pcArray, int size); + +/** + * @brief Defines the callback of the {@link OH_HiDebug_SymbolicAddress} function. + * + * @param pc The program counter pass to {@link OH_HiDebug_SymbolicAddress}. + * @param arg The arg pass to {@link OH_HiDebug_SymbolicAddress}. + * @param frame The parsed frame content, the content is invalid after return of {@link OH_HiDebug_SymbolicAddress}. + * @since 20 + */ +typedef void (*OH_HiDebug_SymbolicAddressCallback)(void* pc, void* arg, const HiDebug_StackFrame* frame); + +/** + * @brief Get detailed symbol info by given pc and the function is not signal-safe. + * + * @param object The backtrace object create by {@link OH_HiDebug_CreateBacktraceObject}. + * @param pc The program counter return by {@link OH_HiDebug_BacktraceFromFp}. + * @param arg The arg will be pass to callback. + * @return Result code + * {@link HIDEBUG_SUCCESS} Get detailed frame info successfully and the callback is invoked. + * {@link HIDEBUG_INVALID_ARGUMENT} Invalid argument£¬object or callback is null. + * {@link HIDEBUG_INVALID_SYMBOLIC_PC_ADDRESS} Could not find symbol info by given pc. + * @since 20 + */ +HiDebug_ErrorCode OH_HiDebug_SymbolicAddress(BacktraceObject object, void* pc, void* arg, + OH_HiDebug_SymbolicAddressCallback callback); + +/** + * @brief Restore original MallocDispatch table. + * + * @permission ohos.permission.DEBUG_MEMORY + * @return Returns 0 if the operation is successful; returns a value smaller + * than 0 otherwise. + * + * @since 20 + */ +int OH_HiDebug_RestoreMallocDispatchTable(void); + +/** + * @brief Replace MallocDispatch table with developer customized memory functions. + * + * @permission ohos.permission.DEBUG_MEMORY + * @param dispatch The pointer to MallocDispatch table. + * @return Returns 0 if the operation is successful; returns a value smaller + * than 0 otherwise. + * + * @since 20 + */ +int OH_HiDebug_SetMallocDispatchTable(HiDebug_MallocDispatch *dispatch); + +/** + * @brief Create a backtrace object for further using and the function is not signal-safe. + * + * @return BacktraceObject if Success or NULL if is not supported on current arch + * @since 20 + */ +BacktraceObject OH_HiDebug_CreateBacktraceObject(void); + +/** + * @brief Destroy a backtrace object and the function is not signal-safe. + * + * @param object The object to be destroyed. + * @since 20 + */ +void OH_HiDebug_DestroyBacktraceObject(BacktraceObject object); + #ifdef __cplusplus } #endif // __cplusplus /** @} */ +/** @} */ #endif // HIVIEWDFX_HIDEBUG_H \ No newline at end of file diff --git a/hiviewdfx/hidebug/include/hidebug/hidebug_type.h b/hiviewdfx/hidebug/include/hidebug/hidebug_type.h index 5d853666e..99eb8de43 100644 --- a/hiviewdfx/hidebug/include/hidebug/hidebug_type.h +++ b/hiviewdfx/hidebug/include/hidebug/hidebug_type.h @@ -62,6 +62,11 @@ typedef enum HiDebug_ErrorCode { HIDEBUG_TRACE_ABNORMAL = 11400104, /** No trace running */ HIDEBUG_NO_TRACE_RUNNING = 11400105 + /** + * The pc passed to the symbolic function is invalid + * @since 20 + */ + HIDEBUG_INVALID_SYMBOLIC_PC_ADDRESS = 11400200, } HiDebug_ErrorCode; /** @@ -174,6 +179,140 @@ typedef enum HiDebug_TraceFlag { /** Capture all thread trace */ HIDEBUG_TRACE_FLAG_ALL_THREADS = 2 } HiDebug_TraceFlag; + +/** + * @brief Defines Stack Frame content + * + * @since 20 + */ +typedef struct HiDebug_StackFrame { + /** + * The type of current frame + */ + HiDebug_StackFrameType type; + + /** frame content. */ + union { + /** Js stack frame defined in {@link HiDebug_JsStackFrame} */ + struct HiDebug_JsStackFrame js; + /** Native frame defined in {@link HiDebug_NativeStackFrame} */ + struct HiDebug_NativeStackFrame native; + } frame; +} HiDebug_StackFrame; + +/** + * @brief Defines Js stack frame content + * + * @since 20 + */ +typedef struct HiDebug_JsStackFrame { + /** + * The pc relative to the start of current file in /proc/self/maps + */ + uint64_t relativePc; + + /** + * The line number of the source code from url + */ + int32_t line; + + /** + * The column number of the source code from url + */ + int32_t column; + + /** + * The name parsed by pc from /proc/self/maps, maybe NULL + */ + const char* mapName; + + /** + * The functionName of current frame, maybe NULL + */ + const char* functionName; + + /** + * The url of current frame, maybe NULL + */ + const char* url; + + /** + * The packageName of current frame, maybe NULL + */ + const char* packageName; +} HiDebug_JsStackFrame; + +/** + * @brief Defines native frame content + * + * @since 20 + */ +typedef struct HiDebug_NativeStackFrame { + /** + * The pc relative to the start of current file in /proc/self/maps + */ + uint64_t relativePc; + + /** + * The pc relative to the start of current function + */ + uint64_t funcOffset; + + /** + * The name parsed by pc from /proc/self/maps + */ + const char* mapName; + + /** + * The functionName parsed by relativePc from symbol table in elf, maybe NULL + */ + const char* functionName; + + /** + * The buildId parsed from .note.gnu.build-id in elf, maybe NULL + */ + const char* buildId; + + /** + * Reserved, maybe NULL + */ + const char* reserved; +} HiDebug_NativeStackFrame; + +/** + * @brief Enum for stack frame type. + * + * @since 20 + */ +typedef enum HiDebug_StackFrameType { + /** Type of js frame */ + HIDEBUG_STACK_FRAME_TYPE_JS = 1, + /** Type of native frame */ + HIDEBUG_STACK_FRAME_TYPE_NATIVE = 2, +} HiDebug_StackFrameType; + +/** + * @brief Defines structure type for MallocDispatch table. + * + * @since 20 + */ +typedef struct HiDebug_MallocDispatch { + void* (*malloc)(size_t); + void* (*calloc)(size_t, size_t); + void* (*realloc)(void*, size_t); + void (*free)(void*); + void* (memalign)(size_t, size_t); + void* (*mmap)(void*, size_t, int, int, int, off_t); + int (*munmap)(void*, size_t); +} HiDebug_MallocDispatch; + +/** + * @brief To represent a backtrace object + * + * @since 20 + */ +typedef struct BacktraceObject__* BacktraceObject; + #ifdef __cplusplus } #endif // __cplusplus @@ -371,6 +510,9 @@ typedef enum HiDebug_TraceFlag { */ #define HIDEBUG_TRACE_TAG_BLUETOOTH (1ULL << 60) +/** @} */ /** @} */ -#endif // HIVIEWDFX_HIDEBUG_TYPE_H \ No newline at end of file +#endif // HIVIEWDFX_HIDEBUG_TYPE_H +#include +#include \ No newline at end of file -- Gitee