From d9f3c49ea207a655cab4ed23ac6029387215cc9b Mon Sep 17 00:00:00 2001 From: shawn_he Date: Tue, 4 Apr 2023 17:19:30 +0800 Subject: [PATCH] update doc Signed-off-by: shawn_he --- .../dfx/apprecovery-guidelines.md | 7 - .../dfx/figures/fault_rectification.png | Bin 61141 -> 135742 bytes .../process_crash_handling_flowchart.png | Bin 0 -> 15296 bytes .../subsystems/subsys-dfx-faultlogger.md | 184 ++--- .../subsys-dfx-hisysevent-logging-config.md | 5 +- .../subsys-dfx-hisysevent-overview.md | 2 +- .../subsystems/subsys-dfx-hitracechain.md | 667 +++++------------- .../subsystems/subsys-dfx-hitracemeter.md | 6 +- .../subsystems/subsys-dfx-overview.md | 33 +- 9 files changed, 315 insertions(+), 589 deletions(-) create mode 100644 en/device-dev/subsystems/figures/process_crash_handling_flowchart.png diff --git a/en/application-dev/dfx/apprecovery-guidelines.md b/en/application-dev/dfx/apprecovery-guidelines.md index 4a82385816..cf31f6ae4c 100644 --- a/en/application-dev/dfx/apprecovery-guidelines.md +++ b/en/application-dev/dfx/apprecovery-guidelines.md @@ -37,18 +37,15 @@ No error will be thrown if the preceding APIs are used in the troubleshooting sc ### Application State Management Since API version 10, application recovery is not limited to automatic restart in the case of an exception. Therefore, you need to understand when the application will load the saved state. - If the last exit of an application is not initiated by a user and a saved state is available for recovery, the startup reason is set to **APP_RECOVERY** when the application is started by the user next time, and the recovery state of the application is cleared. The application recovery status flag is set when **saveAppState** is actively or passively called. The flag is cleared when the application exits normally or the saved state is consumed. (A normal exit is usually triggered by pressing the back key or clearing recent tasks.) ![Application recovery status management](./figures/application_recovery_status_management.png) ### Application State Saving and Restore - API version 10 or later supports saving of the application state when an application is suspended. If a JsError occurs, **onSaveState** is called in the main thread. If an AppFreeze occurs, however, the main thread may be suspended, and therefore **onSaveState** is called in a non-main thread. The following figure shows the main service flow. ![Application recovery from the freezing state](./figures/application_recovery_from_freezing.png) - When the application is suspended, the callback is not executed in the JS thread. Therefore, you are advised not to use the imported dynamic Native library or access the **thread_local** object created by the main thread in the code of the **onSaveState** callback. ### Framework Fault Management @@ -62,13 +59,9 @@ Fault management is an important way for applications to deliver a better user e - Fault query is the process of calling APIs of [faultLogger](../reference/apis/js-apis-faultLogger.md) to obtain the fault information. The figure below does not illustrate the time when [faultLogger](../reference/apis/js-apis-faultLogger.md) is called. You can refer to the [LastExitReason](../reference/apis/js-apis-app-ability-abilityConstant.md#abilityconstantlastexitreason) passed during application initialization to determine whether to call [faultLogger](../reference/apis/js-apis-faultLogger.md) to query information about the previous fault. - ![Fault rectification process](./figures/fault_rectification.png) - It is recommended that you call [errorManager](../reference/apis/js-apis-app-ability-errorManager.md) to handle the exception. After the processing is complete, you can call the **saveAppState** API and restart the application. - If you do not register [ErrorObserver](../reference/apis/js-apis-inner-application-errorObserver.md) or enable application recovery, the application process will exit according to the default processing logic of the system. Users can restart the application from the home screen. - If you have enabled application recovery, the recovery framework first checks whether application state saving is supported and whether the application state saving is enabled. If so, the recovery framework invokes [onSaveState](../reference/apis/js-apis-app-ability-uiAbility.md#uiabilityonsavestate) of the [Ability](../reference/apis/js-apis-app-ability-uiAbility.md). Finally, the application is restarted. ### Supported Application Recovery Scenarios diff --git a/en/application-dev/dfx/figures/fault_rectification.png b/en/application-dev/dfx/figures/fault_rectification.png index e5831ac2b5aefc33a955ad98cd76f41ad28a7f70..a178b2691616d406d2668806ffcd4f89c8ca82a3 100644 GIT binary patch literal 135742 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 QKj1II9)mygwao+n8(K^&wg3PC literal 61141 zcmb5Wby$>L`!x)LF!a#fDUH%8Ln?KnAYCdY-Gh`dgfu86B_OHNoiZRHEz;fH!qB{X zeD3G>y~pvr?{R$JAI1#Bb?s~KbD!s0>s))@{iCf$ginW$fq_BvKwbF}1_su542)X> z5FGH%i66NK_y^PDks1u6xSwGIyuh|q)KbL2D2pMuw7LymF_Mk@1lRCqL`rc>E?8aM8dY8AzytHnPuMevN-VSyxRc% z^Dc@AY9a3m+X3&On=2pps4kz)--SzbqIUC%Mm8zSbgatah2sv0f7{)#=)N&bb%6^z0%_vi!r4(Afl4K!YrwWPFD&l{Y z`Ev8l*cSt#8oQzFWxBY%KRZ)nGwwYCWZ(aD4N14`t?9aoR0$Vz^cd>BcQ#d{=vJN> zS_S`S4C0uVV-`VmvrT>ti2^2EHDUfwuP@Jbqh)qoJ=XdYFsQ(F%9VLuHF$0;PF6W2 zO|u>1F(~=WcqOHZJPW}tg-WSb;aR%tt47i+oJ_g2EK|kl_+RYQI47BTyIBMrCxDN@ zAaR^9OxfpMP@kW7@;SggZgnD={I(Z5Vwi<6`IV!ycn8sQhMw5)TmRb>zyABn=pTe- z-@j$}??;q%SupwkU4?9(*uO(Wztp8r#~}E3d3f+SUInACr)(@f3x8JAd$;EUezo<#0q2i8V_Jl!sZfRltl{+kKK+3Z zxHRL10@LhtbAaCwwoC0o$SxSShu?NtD7`Ga^ePHEW1pWs4Q^?^C}ML#s>TrKUvsal zVXL@dvKoZUuP7Q3q*LXPDrYBQ-PvlYSxexRqm>28nriOKkk|>=^pVADj59V zscLVzAIbKdG&M`DN)%3#O&+(cxZSZa^2Ok=6;MOEY=?{A9I616pRfigmfeOlWz ztBl!N0YubmYRTRTqJxF5S90%pvFr2hdmf!-X?2{1o_vC4*LLHPl#*!SQL8@u8>NTo zEjQOw0;aWtjjc(h?(bwaKEL0-F|Y_2>C04@t6pPk{-oasp;E~;+{;4VyOu7u`pxV!q2Oid_^$m2444z}be@)Gq&U0q2L(u+G59#O(5B&3*cX(_GK3%9`c z^5&?-6E~1v<0L$Y*#0j)ZdbOSr9+q%|3uuF%HJDd@M37&OD!5Aj#*LTJ)=h+MOwT) zJqumaH#4_GZ!JBcu+kq9)TwHx9rP}qR~INB+suG!dKvGpsrPK7R|wbG(tK(W!=$eV zh-~OMzP}^grPoefzKLE!=_KTD%`GV;-6-u<++0F~8utTW5KJkdSKaJ*YwpkV;_!y~ z@b_-3vOZq<%o2E|yuGc_eJzZ@joVOz8c7nbg-B|NsWC2&#iW%pfPJa)&a%Boh`99) ze3jvp{?gaoUp{m!(4xOB!t&bo_lOHQdhhR6*bT9vhSZqr8upr}U^xR)YYY-Ly)+UI zqx{EfAY;7ce{c8v%kQ7^$G;zoC($p+Kt`@kriAKp9lHn)ayOKcTl!+yIu2k7!zYW- ztW7n-gIDDlsEehGlCX7U^$?F?U+CAc*?$=P;(kiEZ<+bbRQ>jAL%|35o{nc4T>d&A z$hX5@P&y!eFx!cO43NK;ahj~mg(2&3uCLO@J}JI^s0zEXJu*S$kn(xV`Agj~=`W8juykG9Qc44!I5y-B( zG?&*Gd%J^5Bwiqu)zc2c!nPIFkJd7Sb~6G_jL6%pbsM~$3|ayMB>YYsE52~NI-&;q z+dUZ(Rz#*FfA;(X{8Nr{4r3I9)ZMyje+~rwPth}8F}wx)3l2nHlQyI)9>vlA@v85J z=|n?R^2F!z^s=vBZ(oW*2C+oQBrCbH*1q7;=CKUlm`}cDcubm+uMq0_`9I_1Q1|RQKv)mo%>`ZvNbi5g%ISX3J>~ILB_eTK0PJ41Ki{!Pl#e$@Dz3#w%0XpN z_S*dY&bZoABn$ccL(bH}j2f`S+pujnVRK2rS;zQeK9l%G0@-Mjx`!g=pGt zzS!*+yHVg4xgr19TZWf#0^Lk2dgDoBXozxeWPb+Xd_ z*+L&hYj%mtRQ0!Dg(S|jBcg3emp#j^&*iDS4=*KWo5^5dhq1%AXjtFvxA#0)>bNog za2~RIJZ2%3l1bd!eZ9eAA(3XzgBV~_7z?5@H@H6eXPsA;n(73lQnBdqJ8rILF3>_g z$pcka53eHq9Vqj3)~~MZ=(*h9(OleZ(p|Z(F#GlveeazdgXb@bqj1e)dDD@pifn!Bn3T11E zMLp1p_8K+neDTs0AQq4Z0w@HGD|wt0WUP<~yQ+~VJ$A&xVw$J2EtVv39PX{e($gKQ zbW)2i9R4>3ihUH(D=5^(%bzbTYWv2F@CM$tyl!cG$+IB8;InZ0l|Vsa+B}^H*D!24 zcR!T=Zyqnd|IN6nx6Q9lY^)Y>S_LV2^3Avojn{0mtHZ?o7J{jJBYwhu(`wKNsPR%& zJS|P{l3^Q1#y-pbZ8&g(s5Rw%Bgn{*i8>ot36S@SgxX%8Ooi35|BN1Jk4S^oRtFVL zh{AXBM^mi&&p|nHjr$J>D!@!Mah6IQOS;1*G2{7|ytxjCwcE-{`%%f_ zt;8{T&y;_jAuh2Hi`NU}J#E#^--)tDWY{9;uh zEMsa;YB8e5_ug!VLnnvxv@}2rP+~$S=V2!xX z#uN~9DiGb%e?c6@9rIJN(MTRn{@TVj6?yx}u~3`N+jXD>-ToIbu&op~?3Vi*BW$Lz zw%+-vSsvoo`$v?%||n)Mq3G4i)-x_Cn^|)(7#WhqM3{p zffCzw;|v{L`xCDbao_q}jpWDI#`VviDE4eWcKnjutzAm|`D3LP9&qIbb7LTB)yBA!LEe+A1AAu@sj%E?Yvh80lQvh=^t_Wu=@muj{n z?DXdg^E2F=ULLz^B=Wmq;Szf?%6Mx!lb*H5C|s|fqxSY}`qMT5PBXcCrx_Hv(<{{6 zj7TTLQokI^v}VF4m2(WA^)UDyId^@3x=e%b(Q4iQ6gQP+@}so@pT8LR|5V^UPh#(9 zt3;U2)O(qMjTmpDEZ^$%YT*(!7o>qf5Z4K&Gj0xX>-5uG;=81rha{7Wpo&cf9FG`) zCtaq|r}{o1dlb1foF8M-2zPVWT4?2j(ICrv1Wopl(4{i~c|KrJv5|mTWNX2@Eqo>H z9onT(%6P>FNQ|?tHKr`U6(|tgiI8>}V((=6y-vOU6Qdth4rBczg^#)Ga)s@uYs;qm zkNV!105*XDY~rjBm)U>*WG*O(AWPu+_2rR{2{gDzpvKhQ$qM?c{lP}dnG0qFNj6?Q)1x=^ogwXMI_!^Bfn@%Pjc1zoc@44|Hpee9-oM6%aa;*O$ zWO2GY84q_$!u|1B??xG?yTd-$x=Z~1ND=Xd^$+2S5GWfe7DEs>%wkol*sP&imG^H> zL_pbe;y&_mAO4q|DF?FuANU)sN`)&vYdQKc(6{d5(R*F2|0PlX4HYa*6HM^mJKYU0 z`Iddo3*PxZUE=>n0aec~_F59K_z_+B|3)-h&MEI;k09S;JxH9<@6CT76@g}rJ$UR1 zV8NagME@NJ*ammNbUp8m=cLN}e{OpA?%#3#@6`19hnDN}9=0t#Yz;`9{lAwDi+qD& z?p(KmCRwy<-~M~m|6hbQERsw`_fQDT3jhB+0Ka*oq5h{}sFC6~Z7HMj=kLUR_3&3{ zx<~yTb^#&$RaxP41N2&9yGmJob_Ytsn0oI2JkukO|JMS8^;Y>W(F__O>0LrNAUhGlNhj@tP zwT16W!cI^oN$-dEp-e9eWHt+OOs~$5cjQ2fq<4W(Ku<(bI#4tkoT?`}5IbNH_C3@V z{#NFejV*BhtE~a~i{60qjeO??WNnMQlnUF0H5#c{K>S3&RCuny~-3G>kGo*`?$U7GGlV5^KW+noVR%R zo6Ws5hIwz)*g;^d*6rCB!!B4daSs51tCQ7E4n#Fj*mLsW`vk1+c-w_Ov%Z~^xnTMv zzYSxQP1k!l_<+3C07M~U!%8UZH#XUKOq%HBB0@&#-|mlLjrn6qTlrb5dr{((T|~5Z z+jjtcr~5_$d(H^Tr*iQD5Dw}i1nax5_JVFa2&nkgi_JbJJTdM*1`3jyYwK<25q$%# zVoF%prdpc=rq|Y}*Gz+t51KRo45o10Cn&iSvSM*_(8+xAQTL&{K1bl+&3;X^Fc8Y% z9yVbh30<7unE|P81|aCQCq~u@%f?`hX*phD*?mYAb65r0%cvL!z7!?l4Q9@Zh+bT? znDlQ@vO=bbB&G)$UB6=%Yo|+hSKW{>&4C2fTYl`vCOt` zkJ^LV7nP0^zf}3?MeSnI(FAV)==F~B3Rbx~wAMB2N~=uQu~49T9EQH1Y8-~(?L*y@ z30vkK9n5eukrmP{$kKnNHn&YL9xY1ds7ATlrn!aCOM4bvEQB&ogBq|BLP)!q;k!yJ z;W8_mYW@hq`hpH`{t=6Wbtj{br_)q*)u3%-OOqe!Nfr+J?qPQg8{uUaV3$tk#K>=I zODtQT#8Ys_uFe4OMkgpxclL;w%dRlD(#z+FafKwR@wA-?Cus7 z{QYY|!_x0fH`f=57gH@kK`TWNR(C4GPVNji@|T3DS{;;)evnuTq>H9MzchA>z7)Fy z@*g^(3)qu;U#djSofx!iI%?{ng+fO(P>x0e{tT(@ju=>YJ2-MjN|NyPoaX(bGG6!{Ut*}jL%-MawbS1;|$hsTwhMdPw6dzEP_tK2#e zvhxf&-{6+;-Zn&SR}4(@aIq%=k{6Y*Wt$bxYW3^IhhS(OaB zkC_Klj{+f#q*KEt$WDIAPtnizoG#{Wrv)JCnvNh8Rd`-vMye&w|l%cGZa{~SCo z{PJCGE-CkNNC-n#1a9)(>*eawdB)XakkKut8hrMgiS9n;)D}Vl%Nx9yS??()r^-i6R;-R3%?&1dITPUB*H+Noyr!RZ>2Sf`Z zliv7^%Z+QopMQ~2OB&$rq_O>xEb?soXzu0KH!|DXI}FHF@NRPBvzdFauwOj9m}t

*?Smr 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: Back trace is successful. Related information is stored in the **msg** string object.
**false**: Back trace failed.
Input arguments:
**pid**: target process ID.
**tid**: target thread ID. If all threads in the process need to be back traced, set **tid** to **0**.
Output argument:
**msg**: return message. If back trace is successful, the call stack information is returned through **msg**.| +| DfxDumpCatcher | bool DumpCatch(const int pid, const int tid, std::string& msg) | Return value:
- **true**: Dumping of stack information is successful. Related information is stored in the msg string object.
- **false**: Dumping of stack information has failed.
Input arguments:
- **pid**: target process ID.
- **tid**: target thread ID. If all threads in the process need to be back traced, set **tid** to **0**.
Output arguments:
- **msg**: If back trace is successful, call stack information is returned through **msg**.| +| DfxDumpCatcher | bool DumpCatchMix(const int pid, const int tid, std::string& msg) | Return value:
- **true**: Dumping of stack information is successful. Related information is stored in the msg string object.
- **false**: Dumping of stack information has failed.
Input arguments:
**pid**: target process ID.
- **tid**: target thread ID. If all threads in the process need to be back traced, set **tid** to **0**.
Output arguments:
- **msg**: If back trace is successful, hybrid stack information is returned through **msg**.| +| DfxDumpCatcher | bool DumpCatchFd(const int pid, const int tid, std::string& msg, int fd) | Return value:
- **true**: Dumping of stack information is successful. Related information is stored in the msg string object.
- **false**: Dumping of stack information has failed.
Input arguments:
**pid**: target process ID.
- **tid**: target thread ID. If all threads in the process need to be back traced, set **tid** to **0**.
- **fd**: handle of the file to be written.
Output parameters:
- **msg**: If back trace is successful, call stack information is returned through **msg**.| +| DfxDumpCatcher | bool DumpCatchMultiPid(const std::vector\ pidV, std::string& msg) | Return value:
- **true**: Dumping of stack information is successful. Related information is stored in the msg string object.
- **false**: Dumping of stack information has failed.
Input arguments:
- **pidV**: target process ID list.
Output arguments:
- **msg**: If back trace is successful, call stack information is returned through **msg**.| -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE**
-> If the PID that calls this API is different from the target PID, the caller must be the **system** or **root** user. To capture the call stack of a process that does not belong to the current user group, ensure that you have permissions to read **/proc/pid/maps** and implement **ptrace** on the peer process. +> **NOTE** +> If the PID that calls this API is different from the target PID, the caller must be the **system** or **root** user. -### Development Example +### How to Develop + +You can use DumpCatcher to obtain call stack information for the specified process (thread) of an application. The following uses the **dumpcatcherdemo** module as an example to describe how to use the DumpCatcher APIs to obtain the call stack information. -You can use DumpCatcher to obtain the call stack of a specified process (thread) in your applications. The following uses the **dumpcatcherdemo** module as an example to describe how to use the DumpCatcher API to obtain the call stack. +1. Add the DumpCatcher dependency to the build file. Take /base/hiviewdfx/faultloggerd/example/BUILD.gn as an example. Add the **dump_catcher.h** file path to **include_dirs** and add the required **//base/hiviewdfx/faultloggerd/interfaces/innerkits/dump_catcher:lib_dfx_dump_catcher** module to **deps**. -1. Add the DumpCatcher dependency to the build file. Take /base/hiviewdfx/faultloggerd/example/BUILD.gn as an example. Add the **dfx_dump_catcher.h** file path to **include_dirs** and add the required **//base/hiviewdfx/faultloggerd/interfaces/innerkits/dump_catcher:lib_dfx_dump_catcher** module to **deps**. - ``` import("//base/hiviewdfx/faultloggerd/faultloggerd.gni") import("//build/ohos.gni") - + config("dumpcatcherdemo_config") { visibility = [ ":*" ] - + include_dirs = [ ".", "//utils/native/base/include", "//base/hiviewdfx/faultloggerd/interfaces/innerkits/dump_catcher/include/", # Add the path of the dump_catcher header file. ] } - - ohos_executable("dumpcatcherdemo") { sources = [ "dump_catcher_demo.cpp" ] configs = [ ":dumpcatcherdemo_config" ] deps = [ "//base/hiviewdfx/faultloggerd/interfaces/innerkits/dump_catcher:lib_dfx_dump_catcher", # Add the DumpCatcher module dependency. "//utils/native/base:utils", ] external_deps = [ "hilog_native:libhilog" ] install_enable = true part_name = "faultloggerd" subsystem_name = "hiviewdfx" + + ohos_executable("dumpcatcherdemo") { + sources = [ "dump_catcher_demo.cpp" ] + configs = [ ":dumpcatcherdemo_config" ] + deps = [ + "//base/hiviewdfx/faultloggerd/interfaces/innerkits/dump_catcher:lib_dfx_dump_catcher", # Add the DumpCatcher module dependency. + "//utils/native/base:utils", + ] + external_deps = [ "hilog_native:libhilog" ] + install_enable = true + part_name = "faultloggerd" + subsystem_name = "hiviewdfx" } ``` 2. Define the header file. Take **/base/hiviewdfx/faultloggerd/example/dump_catcher_demo.h** as an example. In the sample code, the function of the stack depth test is called to construct a call stack with a specified depth. - + ``` #ifndef DUMP_CATCHER_DEMO_H #define DUMP_CATCHER_DEMO_H - + #include - + #define NOINLINE __attribute__((noinline)) - + // Define the macro function to automatically generate a function call chain. #define GEN_TEST_FUNCTION(FuncNumA, FuncNumB) \ __attribute__((noinline)) int TestFunc##FuncNumA() \ { \ return TestFunc##FuncNumB(); \ } - + // Call the function of the stack depth test. int TestFunc0(void); int TestFunc1(void); @@ -118,33 +131,33 @@ You can use DumpCatcher to obtain the call stack of a specified process (thread) int TestFunc8(void); int TestFunc9(void); int TestFunc10(void); - + #endif // DUMP_CATCHER_DEMO_H ``` 3. Call the **DumpCatch** API in the source file. Take **/base/hiviewdfx/faultloggerd/example/dump_catcher_demo.cpp** as an example. Include the **dfx_dump_catcher.h** file, declare the **DfxDumpCatcher** object, use the macro function to construct a function call chain, call the **DumpCatch** method, and pass the required process ID and thread ID of the call stack into this method. - + ``` #include "dump_catcher_demo.h" - + #include #include #include // Include the dfx_dump_catcher.h file. #include "dfx_dump_catcher.h" using namespace std; - + NOINLINE int TestFunc10(void) { OHOS::HiviewDFX::DfxDumpCatcher dumplog; string msg = ""; - bool ret = dumplog.DumpCatch(getpid(), gettid(), msg); // Call the DumpCatch API to obtain the call stack. + bool ret = dumplog.DumpCatch(getpid(), gettid(), msg); // Call the DumpCatch API to obtain the call stack information. if (ret) { cout << msg << endl; } return 0; } - + // Use the macro function to automatically generate a function call chain. GEN_TEST_FUNCTION(0, 1) GEN_TEST_FUNCTION(1, 2) @@ -156,7 +169,7 @@ You can use DumpCatcher to obtain the call stack of a specified process (thread) GEN_TEST_FUNCTION(7, 8) GEN_TEST_FUNCTION(8, 9) GEN_TEST_FUNCTION(9, 10) - + int main(int argc, char *argv[]) { TestFunc0(); @@ -165,55 +178,57 @@ You can use DumpCatcher to obtain the call stack of a specified process (thread) ``` -## Using ProcessDump to Obtain the Call Stack +## Using DumpCatcher Commands to Obtain Call Stack Information ### Tool Description -ProcessDump is a command line interface (CLI) based tool for capturing call stacks on OpenHarmony. It uses the **-p** and **-t** parameters to specify the process and thread. After the command is executed, the thread stack information of the specified process is displayed in the CLI window. +DumpCatcher Command Tool is a command line interface (CLI)-based tool for capturing call stack information on OpenHarmony. It uses the **-p** and **-t** parameters to specify the process and thread. After the command is executed, the thread stack information of the specified process is displayed in the CLI window. By specifying the **-m** parameter, you can also capture the JS and Native hybrid stack information of an application process. - **Table 3** Usage of the CLI-based ProcessDump + **Table 3** Usage of the DumpCatcher Command Tool -| Tool| Path| Command| Description| +| Tool| Path| Command| Description| | -------- | -------- | -------- | -------- | -| processdump | /system/bin | - processdump -p [pid]
- processdump -p [pid] -t [tid] | **Arguments:**
**- -p [pid]**: prints stack information for all threads of the specified process.
**- -p [pid] -t [tid]**: prints information for the specified thread of the specified process.
**Return value:**
If the stack information is parsed successfully, the information is displayed in the standard output. If the stack information fails to be parsed, error information is displayed.| - +| dumpcatcher | /system/bin | - dumpcatcher -p [pid]
- dumpcatcher -p [pid] -t [tid]
- dumpcatcher -m -p [pid]
- dumpcatcher -m -p [pid] -t [tid]
| **Description:**
- **-p [pid]**: prints all thread stack information of the specified process.
- **-p [pid] -t [tid]**: prints stack information for the specified thread of the specified process.
- **-m -p [pid]**: prints hybrid stack information for all threads of the specified process.
- **-m -p [pid] -t [tid]**: prints hybrid stack information for the specified thread of the specified process.
**Return value:**
If the stack information is parsed successfully, the information is displayed in the standard output. If the stack information fails to be parsed, error information is displayed.| -> ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE**
-> This tool must be used by the **root** user, or the caller must have the permission to ptrace the target process and read the smaps of the target process. +### Development Example -### Example +Print call stack information of the **hiview** process. -Use ProcessDump to print the call stack of the **hiview** process. - ``` -# ps -A | grep hiview - 114 ? 00:00:00 hiview -# processdump -p 114 -t 114 -Tid:114, Name:hiview -#00 pc 0000000000089824(00000000b6f44824) /system/lib/ld-musl-arm.so.1(ioctl+68) -#01 pc 000000000002a709(00000000b6c56709) /system/lib/libipc_core.z.so(_ZN4OHOS15BinderConnector11WriteBinderEmPv+16) -#02 pc 000000000002ba75(00000000b6c57a75) /system/lib/libipc_core.z.so(_ZN4OHOS13BinderInvoker18TransactWithDriverEb+224) -#03 pc 000000000002bb37(00000000b6c57b37) /system/lib/libipc_core.z.so(_ZN4OHOS13BinderInvoker13StartWorkLoopEv+22) -#04 pc 000000000002c211(00000000b6c58211) /system/lib/libipc_core.z.so(_ZN4OHOS13BinderInvoker10JoinThreadEb+36) -#05 pc 0000000000038d07(00000000004bcd07) /system/bin/hiview(_ZNSt3__h6vectorINS_9sub_matchINS_11__wrap_iterIPKcEEEENS_9allocatorIS6_EEE8__appendEj+596) -#06 pc 0000000000028655(00000000004ac655) /system/bin/hiview -#07 pc 00000000000c2b08(00000000b6f7db08) /system/lib/ld-musl-arm.so.1(__libc_start_main+116) -#08 pc 00000000000285f4(00000000004ac5f4) /system/bin/hiview -#09 pc 0000000000028580(00000000004ac580) /system/bin/hiview +# ps -ef |grep hiview +hiview 240 1 0 17:01:49 ? 00:00:14 hiview +root 1822 1560 7 20:56:36 pts/0 00:00:00 grep hiview +# dumpcatcher -p 240 -t 240 +Result: 0 ( no error ) +Timestamp:2017-08-05 20:56:43.000 +Pid:240 +Uid:1201 +Process name:/system/bin/hiview +Tid:240, Name:hiview +#00 pc 00098f8c /system/lib/ld-musl-arm.so.1(ioctl+68) +#01 pc 0000e2a1 /system/lib/chipset-pub-sdk/libipc_single.z.so +#02 pc 0000ed59 /system/lib/chipset-pub-sdk/libipc_single.z.so +#03 pc 0000ee1f /system/lib/chipset-pub-sdk/libipc_single.z.so +#04 pc 0000f745 /system/lib/chipset-pub-sdk/libipc_single.z.so +#05 pc 00037577 /system/bin/hiview +#06 pc 00025973 /system/bin/hiview +#07 pc 000db210 /system/lib/ld-musl-arm.so.1 +#08 pc 000258d8 /system/bin/hiview +#09 pc 0002587c /system/bin/hiview ``` -## Locating Faults Based on Crash Logs +## Locating Faults Based on the Crash Log -You can locate faults based on the crash stack logs generated by FaultLoggerd. This section describes how to use the addr2line tool to locate a crash fault. +You can locate faults based on the crash stack logs generated by Faultloggerd. This section describes how to use the addr2line tool to locate a crash fault. 1. Find a program crash or construct a crash. For example, insert the following code into your code to trigger an invalid memory access fault (SIGSEGV). - + ``` NOINLINE int TriggerSegmentFaultException() { @@ -228,40 +243,41 @@ You can locate faults based on the crash stack logs generated by FaultLoggerd. T 2. Obtain the crash function call stack log. The process generates a temporary log file in the** /data/log/faultlog/temp** directory due to an exception that is not handled. The naming rule of the temporary log file is as follows: - + ``` cppcrash-pid-time ``` - The generated call stack is as follows: + The generated call stack information is as follows: + - ``` + Timestamp:2017-08-05 17:35:03.000 Pid:816 Uid:0 - Process name:./crasher + Process name:./crasher_c Reason:Signal:SIGSEGV(SEGV_ACCERR)@0x0042d33d Fault thread Info: Tid:816, Name:crasher + #00 pc 0000332c /data/crasher(TriggerSegmentFaultException+15)(8bc37ceb8d6169e919d178fdc7f5449e) + #01 pc 000035c7 /data/crasher(ParseAndDoCrash+277)(8bc37ceb8d6169e919d178fdc7f5449e) + #02 pc 00003689 /data/crasher(main+39)(8bc37ceb8d6169e919d178fdc7f5449e) + #03 pc 000c3b08 /system/lib/ld-musl-arm.so.1(__libc_start_main+116) + #04 pc 000032f8 /data/crasher(_start_c+112)(8bc37ceb8d6169e919d178fdc7f5449e) + #05 pc 00003284 /data/crasher(_start+32)(8bc37ceb8d6169e919d178fdc7f5449e) + Registers: r0:0042d33d r1:0000000b r2:1725d4c4 r3:b6f9fa84 r4:bec97e69 r5:b6fc0268 r6:0042d661 r7:bec97d60 r8:00000000 r9:00000000 r10:00000000 fp:bec97d20 ip:00000020 sp:bec97cd0 lr:b6f9fae4 pc:0042d32c - - #00 pc 000000000000332c(000000000042d32c) /data/crasher(TriggerSegmentFaultException+15) - #01 pc 00000000000035c7(000000000042d5c7) /data/crasher(ParseAndDoCrash+277) - #02 pc 0000000000003689(000000000042d689) /data/crasher(main+39) - #03 pc 00000000000c3b08(00000000b6fbbb08) /system/lib/ld-musl-arm.so.1(__libc_start_main+116) - #04 pc 00000000000032f8(000000000042d2f8) /data/crasher(_start_c+112) - #05 pc 0000000000003284(000000000042d284) /data/crasher(_start+32) ``` -3. Use the addr2line tool to analyze the call stack. +3. Use the addr2line tool to analyze the call stack information. Then, parse the line number based on the offset address. - + ``` - root:~/OpenHarmony/out/hi3516dv300/exe.unstripped/hiviewdfx/faultloggerd$ addr2line -e crasher 000332c + root:~/OpenHarmony/out/hi3516dv300/exe.unstripped/hiviewdfx/faultloggerd$ addr2line -e crasher 0000332c base/hiviewdfx/faultloggerd/tools/crasher/dfx_crasher.c:57 ``` diff --git a/en/device-dev/subsystems/subsys-dfx-hisysevent-logging-config.md b/en/device-dev/subsystems/subsys-dfx-hisysevent-logging-config.md index e6c0316c22..940b818894 100644 --- a/en/device-dev/subsystems/subsys-dfx-hisysevent-logging-config.md +++ b/en/device-dev/subsystems/subsys-dfx-hisysevent-logging-config.md @@ -28,8 +28,7 @@ Constraints on the event domain, event name, and parameter - Zero or more event names can be defined for one event domain. The event names in the same event domain must be unique. -- Multiple parameters can be defined for one event name. The parameters in the same event name must be unique. There must be only one parameter named **__BASE** in each event name. See Table 1 for the fields of this parameter and Table 2 for the fields of other custom parameters. - +- Multiple parameters can be defined for one event name. The parameters in the same event name must be unique. There must be only one parameter named **\__BASE** in each event name. See Table 1 for the fields of this parameter and Table 2 for the fields of other custom parameters. **Table 1** Fields in the \__BASE parameter | Field| Description| @@ -47,8 +46,10 @@ Constraints on the event domain, event name, and parameter | arrsize | Length of the parameter of the array type. This field is optional.
Value:
1-100| | desc | Parameter description. This field is mandatory.
Rule:
The description contains 3 to 128 characters, including a to z, A to Z, 0 to 9, and underscores (_).| + ## How to Develop + ### Writing a YAML File diff --git a/en/device-dev/subsystems/subsys-dfx-hisysevent-overview.md b/en/device-dev/subsystems/subsys-dfx-hisysevent-overview.md index efd5de904f..e1c5a61544 100644 --- a/en/device-dev/subsystems/subsys-dfx-hisysevent-overview.md +++ b/en/device-dev/subsystems/subsys-dfx-hisysevent-overview.md @@ -1,4 +1,4 @@ -# HiSysEvent Overview +# HiSysEvent ## Introduction diff --git a/en/device-dev/subsystems/subsys-dfx-hitracechain.md b/en/device-dev/subsystems/subsys-dfx-hitracechain.md index 9b9b85b66a..f8a7c70451 100644 --- a/en/device-dev/subsystems/subsys-dfx-hitracechain.md +++ b/en/device-dev/subsystems/subsys-dfx-hitracechain.md @@ -2,530 +2,235 @@ ## Overview -HiTraceChain tracks the call chain with the same **traceid** throughout the inter-device, inter-process, and inter-thread service processes. It associates and displays the call relationship and various output information during the entire process, helping you analyze and locate faults and optimize the system. +HiTraceChain tracks the call chain with the same **traceid** throughout the inter-device, inter-process, and inter-thread service processes. It associates and displays the call relationship and various output information during the entire process, helping you analyze and locate faults and optimize the system. -## Use Cases + +## When to Use HiTraceChain can be used for the following purposes: -- Associates and reports service process information \(such as logs and events\) on the device. +- Associates and reports service process information (such as logs and events) on the device. - Displays and analyzes reported information on the cloud to facilitate fault location. -- Works with the IDE to debug the detailed service process and time consumption distribution for system optimization. +- Works with the IDE to debug the detailed service process and time consumption distribution for system optimization. - **Figure 1** Use cases of HiTraceChain - + **Figure 1** Use cases of HiTraceChain ![](figures/use-cases-of-hitrace.png "use-cases-of-hitrace") ### Usage Example -**Figure 2** Service calling process \(inter-device and inter-process synchronous call\) + **Figure 2** Service calling process \(inter-device and inter-process synchronous call\) -![](figures/service-calling-process-(inter-device-and-inter-process-synchronous-call).png "service-calling-process-(inter-device-and-inter-process-synchronous-call)") + ![](figures/service-calling-process-(inter-device-and-inter-process-synchronous-call).png "service-calling-process-(inter-device-and-inter-process-synchronous-call)") 1. Display the call relationship in the service process, analyze key paths and function dependency, and determine the time consumption and call frequency at each call point to detect performance bottlenecks. - **Figure 3** Service calling process + **Figure 3** Service calling process + ![](figures/service-calling-process.png "service-calling-process") - ![](figures/service-calling-process.png "service-calling-process") - **Figure 4** Time delay in the service calling process + **Figure 4** Time delay in the service calling process + ![](figures/time-delay-in-the-service-calling-process.png "time-delay-in-the-service-calling-process") - ![](figures/time-delay-in-the-service-calling-process.png "time-delay-in-the-service-calling-process") +2. Add **traceid** to logs and events automatically to facilitate comprehensive analysis and quick fault location. -2. Add **traceid** to logs and events automatically to facilitate comprehensive analysis and quick fault location. ## Available APIs -HiTraceChain provides C++ and C APIs. The upper-layer services mainly use HiTraceChain to start and stop call chain tracing. +HiTraceChain provides C++ and C APIs. The upper-layer services mainly use HiTraceChain to start and stop call chain trace. + +HiTraceChain is implemented at layer C. It works by transferring **traceid** throughout the service calling process. Before service processing, HiTrace sets **traceid** in the thread local storage (TLS) of the calling thread. During service processing, HiTrace obtains **traceid** from the contextual TLS of the calling thread and automatically adds it to the log and event information. After service processing is complete, HiTrace clears **traceid** from the TLS of the calling thread. -HiTraceChain is implemented at layer C. It works by transferring **traceid** throughout the service calling process. Before service processing, HiTraceChain sets **traceid** in the thread local storage \(TLS\) of the calling thread. During service processing, HiTraceChain obtains **traceid** from the contextual TLS of the calling thread and automatically adds it to the log and event information. After service processing is complete, HiTraceChain clears **traceid** from the TLS of the calling thread. ### Java, C++, and C APIs -**Table 1** Description of C++ and C APIs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  

C++

-

C

-

Class

-

API

-

API

-

HiTraceChain

-

-

-

-

-

-

-

-

HiTraceId Begin(const std::string& name, int flags)

-

HiTraceIdStruct HiTraceChainBegin(const char* name, int flags)

-

void End(const HiTraceId& id)

-

void HiTraceChainEnd(const HiTraceIdStruct* pId)

-

HiTraceId GetId();

-

HiTraceIdStruct HiTraceChainGetId()

-

void SetId(const HiTraceId& id)

-

void HiTraceChainSetId(const HiTraceIdStruct* pId)

-

void ClearId()

-

void HiTraceChainClearId()

-

HiTraceId CreateSpan()

-

HiTraceIdStruct HiTraceChainCreateSpan()

-

void Tracepoint(HiTraceTracepointType type, const HiTraceId& id, const char* fmt, ...)

-

void HiTraceChainTracepoint(HiTraceTracepointType type, const HiTraceIdStruct* pId, const char* fmt, ...)

-

void Tracepoint(HiTraceCommunicationMode mode, HiTraceTracepointType type, const HiTraceId& id, const char* fmt, ...)

-

void HiTraceChainTracepointEx(HiTraceCommunicationMode mode, HiTraceTracepointType type, const HiTraceIdStruct* pId, const char* fmt, ...)

-

HiTraceId

-

-

-

-

-

-

-

-

-

-

-

-

-

-

HiTraceId();

-

void HiTraceChainInitId(HiTraceIdStruct* pId)

-

HiTraceId(const uint8_t* pIdArray, int len)

-

HiTraceIdStruct HiTraceChainBytesToId(const uint8_t* pIdArray, int len)

-

bool IsValid()

-

int HiTraceChainIsValid(const HiTraceIdStruct* pId)

-

bool IsFlagEnabled(HiTraceFlag flag)

-

int HiTraceChainIsFlagEnabled(const HiTraceIdStruct* pId, HiTraceFlag flag)

-

void EnableFlag(HiTraceFlag flag)

-

void HiTraceChainEnableFlag(HiTraceIdStruct* pId, HiTraceFlag flag)

-

int GetFlags()

-

int HiTraceChainGetFlags(const HiTraceIdStruct* pId)

-

void SetFlags(int flags)

-

void HiTraceChainSetFlags(HiTraceIdStruct* pId, int flags)

-

uint64_t GetChainId()

-

uint64_t HiTraceChainGetChainId(const HiTraceIdStruct* pId)

-

void SetChainId(uint64_t chainId)

-

void HiTraceChainSetChainId(HiTraceIdStruct* pId, uint64_t chainId)

-

uint64_t GetSpanId()

-

uint64_t HiTraceChainGetSpanId(const HiTraceIdStruct* pId)

-

void SetSpanId(uint64_t spanId)

-

void HiTraceChainSetSpanId(HiTraceIdStruct* pId, uint64_t spanId)

-

uint64_t GetParentSpanId()

-

uint64_t HiTraceChainGetParentSpanId(const HiTraceIdStruct* pId)

-

void SetParentSpanId(uint64_t parentSpanId)

-

void HiTraceChainSetParentSpanId(HiTraceIdStruct* pId, uint64_t parentSpanId)

-

int ToBytes(uint8_t* pIdArray, int len)

-

int HiTraceChainIdToBytes(const HiTraceIdStruct* pId, uint8_t* pIdArray, int len)

-
+ **Table 1** Description of C++ and C APIs + +| | **C++** | **C** | +| -------- | -------- | -------- | +| **Class**| **Function**| **Function**| +| HiTraceChain | HiTraceId Begin(const std::string& name, int flags) | HiTraceIdStruct HiTraceChainBegin(const char* name, int flags) | +| | void End(const HiTraceId& id) | void HiTraceChainEnd(const HiTraceIdStruct* pId) | +| | HiTraceId GetId(); | HiTraceIdStruct HiTraceChainGetId() | +| | void SetId(const HiTraceId& id) | void HiTraceChainSetId(const HiTraceIdStruct* pId) | +| | void ClearId() | void HiTraceChainClearId() | +| | HiTraceId CreateSpan() | HiTraceIdStruct HiTraceChainCreateSpan() | +| | void Tracepoint(HiTraceTracepointType type, const HiTraceId& id, const char* fmt, ...) | void HiTraceChainTracepoint(HiTraceTracepointType type, const HiTraceIdStruct* pId, const char* fmt, ...) | +| | void Tracepoint(HiTraceCommunicationMode mode, HiTraceTracepointType type, const HiTraceId& id, const char* fmt, ...) | void HiTraceChainTracepointEx(HiTraceCommunicationMode mode, HiTraceTracepointType type, const HiTraceIdStruct* pId, const char* fmt, ...) | +| HiTraceId | HiTraceId(); | void HiTraceChainInitId(HiTraceIdStruct* pId) | +| | HiTraceId(const uint8_t* pIdArray, int len) | HiTraceIdStruct HiTraceChainBytesToId(const uint8_t* pIdArray, int len) | +| | bool IsValid() | int HiTraceChainIsValid(const HiTraceIdStruct* pId) | +| | bool IsFlagEnabled(HiTraceFlag flag) | int HiTraceChainIsFlagEnabled(const HiTraceIdStruct* pId, HiTraceFlag flag) | +| | void EnableFlag(HiTraceFlag flag) | void HiTraceChainEnableFlag(HiTraceIdStruct* pId, HiTraceFlag flag) | +| | int GetFlags() | int HiTraceChainGetFlags(const HiTraceIdStruct* pId) | +| | void SetFlags(int flags) | void HiTraceChainSetFlags(HiTraceIdStruct* pId, int flags) | +| | uint64_t GetChainId() | uint64_t HiTraceChainGetChainId(const HiTraceIdStruct* pId) | +| | void SetChainId(uint64_t chainId) | void HiTraceChainSetChainId(HiTraceIdStruct* pId, uint64_t chainId) | +| | uint64_t GetSpanId() | uint64_t HiTraceChainGetSpanId(const HiTraceIdStruct* pId) | +| | void SetSpanId(uint64_t spanId) | void HiTraceChainSetSpanId(HiTraceIdStruct* pId, uint64_t spanId) | +| | uint64_t GetParentSpanId() | uint64_t HiTraceChainGetParentSpanId(const HiTraceIdStruct* pId) | +| | void SetParentSpanId(uint64_t parentSpanId) | void HiTraceChainSetParentSpanId(HiTraceIdStruct* pId, uint64_t parentSpanId) | +| | int ToBytes(uint8_t* pIdArray, int len) | int HiTraceChainIdToBytes(const HiTraceIdStruct_ pId, uint8_t* pIdArray, int len) | + ### Parameters of C++ APIs -**Table 2** Parameters of C++ APIs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Class

-

API

-

Description

-

HiTraceChain

-

-

-

-

-

-

-

-

HiTraceId Begin(const std::string& name, int flags)

-

Starts HiTraceChain, generates a HiTraceId object, and sets it in the TLS of the calling thread.

-

Input arguments:

-
  • name: Indicates the name of the service process.
  • flags: Indicates tracing flags, which can be used in combination.
    • HITRACE_FLAG_INCLUDE_ASYNC: Traces both synchronous and asynchronous calls. By default, only synchronous calls are traced.
    • HITRACE_FLAG_DONOT_CREATE_SPAN: Do not create a span. By default, a span is created.
    • HITRACE_FLAG_TP_INFO: Outputs the tracepoint information. By default, the information is not output.
    • HITRACE_FLAG_NO_BE_INFO: Do not output the start and end information. By default, the information is output.
    • HITRACE_FLAG_DONOT_ENABLE_LOG: Do not associate logs for output. By default, logs are associated for output.
    • HITRACE_FLAG_FAULT_TRIGGER: Triggers tracing by fault. By default, tracing is triggered normally.
    • HITRACE_FLAG_D2D_TP_INFO: Outputs the device-to-device tracepoint information. By default, the information is not output.
    • HITRCE_FLAG_DEFAULT: Indicates the default flag.
    -
  • Output arguments: none
  • Return value: Returns a valid HiTraceId object if call chain tracing is triggered successfully; returns an invalid object otherwise.
-

Note: In nested tracing mode, an invalid object will be returned if tracing is started at the nested layer.

-

void End(const HiTraceId& id)

-

Stops HiTraceChain based on the HiTraceId object returned by the Begin API, and clears the HiTraceId object in the TLS of the calling thread.

-

Input arguments:

-
  • id: Indicates the HiTraceId object.
-

Output arguments: none

-

Return value: none

-

HiTraceId GetId();

-

Obtains the HiTraceId object from the TLS of the calling thread.

-

Input arguments: none

-

Output arguments: none

-

Return value: Returns the HiTraceId object in the contextual TLS of the calling thread.

-

void SetId(const HiTraceId& id)

-

Purpose: Sets the HiTraceId object in the TLS of the calling thread.

-

Input arguments:

-
  • id: Indicates the HiTraceId object.
-

Output arguments: none

-

Return value: none

-

void ClearId()

-

Clears the HiTraceId object in the TLS of the current thread.

-

Input arguments: none

-

Output arguments: none

-

Return value: none

-

HiTraceId CreateSpan()

-

Obtains the span ID from the current HiTraceId object.

-

Input arguments: none

-

Output arguments: none

-

Return value: Returns the current span ID.

-

void Tracepoint(HiTraceTracepointType type, const HiTraceId& id, const char* fmt, ...)

-

Outputs HiTraceChain call chain information based on the information type. The information includes the timestamp and HiTraceId object information of the span.

-

Input arguments:

-
  • type: Indicates the information type. The options are as follows:
    • HITRACE_TP_CS: Client Send, which indicates the messages sent by the synchronous/asynchronous communication client.
    • HITRACE_TP_SR: Server Receive, which indicates the messages received by the server in synchronous/asynchronous communication.
    • HITRACE_TP_SS: Server Send, which indicates the response messages sent by the server in synchronous communication.
    • HITRACE_TP_CR: Client Receive, which indicates the response messages received by the synchronous communication client.
    • HITRACE_TP_GENERAL: Indicates the common output information.
    -
  • id: Indicates the ID of the current span.
  • fmt: Indicates the string describing the format variable parameter.
  • args: Indicates the variable parameter.
-

Output arguments: none

-

Return value: none

-

void Tracepoint(HiTraceCommunicationMode mode, HiTraceTracepointType type, const HiTraceId& id, const char* fmt, ...)

-

Outputs HiTraceChain call chain information based on the communication mode and information type. The information includes the timestamp and HiTraceId object information of the span.

-

Input arguments:

-
  • mode: Indicates the communication mode. The options are as follows:
    • HITRACE_CM_DEFAULT: default communication mode used when no communication mode is specified
    • HITRACE_CM_THREAD: inter-thread communication
    • HITRACE_CM_PROCESS: inter-process communication
    • HITRACE_CM_DEVICE: inter-device communication
    -
  • type: Indicates the information type. The options are as follows:
    • HITRACE_TP_CS: Client Send, which indicates the messages sent by the synchronous/asynchronous communication client.
    • HITRACE_TP_SR: Server Receive, which indicates the messages received by the server in synchronous/asynchronous communication.
    • HITRACE_TP_SS: Server Send, which indicates the response messages sent by the server in synchronous communication.
    • HITRACE_TP_CR: Client Receive, which indicates the response messages received by the synchronous communication client.
    • HITRACE_TP_GENERAL: Indicates the common output information.
    -
  • id: Indicates the ID of the current span.
  • fmt: Indicates the string describing the format variable parameter.
  • args: Indicates the variable parameter.
-

Output arguments: none

-

Return value: none

-

HiTraceId

-

-

-

-

-

-

-

-

-

-

-

-

-

-

HiTraceId();

-

Represents the default constructor used to generate an invalid HiTraceId object.

-

Input arguments: none

-

Output arguments: none

-

Return value: none

-

HiTraceId(const uint8_t* pIdArray, int len)

-

Represents the constructor used to create a HiTraceId object based on the specified byte array.

-
Input arguments:
  • pIdArray: Indicates the pointer to a byte array.
  • len: Indicates the length of the byte array.
-
-

Output arguments: none

-

Return value: none

-

bool IsValid()

-

Checks whether the HiTraceId object is valid.

-

Input arguments: none

-

Output arguments: none

-

Return value: Returns true if the HiTraceId object is valid; returns false otherwise.

-

bool IsFlagEnabled(HiTraceFlag flag)

-

Checks whether the tracing flag of the HiTraceId object is enabled.

-

Input arguments:

-
  • flag: Indicates the tracing flag. For details, see the description in the Begin function.
-

Output arguments: none

-

Return value: Returns true if the tracing flag is enabled; returns false otherwise.

-

void EnableFlag(HiTraceFlag flag)

-

Enables the tracing flag of the HiTraceId object.

-

Input arguments:

-
  • flag: Indicates the tracing flag. For details, see the description in the Begin function.
-

Output arguments: none

-

Return value: none

-

int GetFlags()

-

Obtains the tracing flag set in the HiTraceId object.

-

Input arguments: none

-

Output arguments: none

-

Return value: Returns the combination of tracing flags. For details, see the description in the Begin function.

-

void SetFlags(int flags)

-

Sets a tracing flag in the HiTraceId object.

-

Input arguments:

-
  • flags: Indicates the combination of tracing flags. For details, see the description in the Begin function.
-

Output arguments: none

-

Return value: none

-

uint64_t GetChainId()

-

Obtains the call chain ID.

-

Input arguments: none

-

Output arguments: none

-

Return value: Returns the call chain ID.

-

void SetChainId(uint64_t chainId)

-

Sets the call chain ID in the HiTraceId object.

-

Input arguments:

-
  • chainId: Indicates the call chain ID.
-

Output arguments: none

-

Return value: none

-

uint64_t GetSpanId()

-

Obtains the span ID from the current HiTraceId object.

-

Input arguments: none

-

Output arguments: none

-

Return value: Returns the current span ID.

-

void SetSpanId(uint64_t spanId)

-

Sets the span ID in the HiTraceId object.

-

Input arguments:

-
  • spanId: Indicates the span ID.
-

Output arguments: none

-

Return value: none

-

uint64_t GetParentSpanId()

-

Obtains the parent span ID from the current HiTraceId object.

-

Input arguments: none

-

Output arguments: none

-

Return value: Returns the parent span ID.

-

void SetParentSpanId(uint64_t parentSpanId)

-

Sets the parent span ID in the HiTraceId object.

-

Input arguments:

-
  • parentSpanId: Indicates the parent span ID.
-

Output arguments: none

-

Return value: none

-

int ToBytes(uint8_t* pIdArray, int len)

-

Converts the HiTraceId object into a byte array to facilitate caching or communication transfer.

-

Input arguments:

-
  • pIdArray: Indicates the pointer to a byte array. The minimum length of the byte array is HITRACE_ID_LEN.
  • len: Indicates the length of the byte array.
-

Output arguments

-
  • pIdArray: Indicates the pointer to a byte array. If the object is valid, the object data after conversion is stored.
-

Return value: Returns a value greater than 0 (indicating a valid array of object data) if the conversion is successful; returns 0 otherwise.

-
- -## Call Chain Processing - -Inter-device, inter-process, and inter-thread calls are implemented through the communication mechanism. **HiTraceChain** requires transfer of **traceid** in the communication mechanism. - -Some built-in communication mechanisms \(such as ZIDL\) of OpenHarmony already support the transfer of **traceid**. - -The following figure shows the process of transferring **traceid** in synchronous call. The process of transferring **traceid** in asynchronous call is similar. - -Extended communication mechanisms can also follow this implementation. - -**Figure 5** Call chain tracing in synchronous communication - -![](figures/call-chain-tracing-in-synchronous-communication.png "call-chain-tracing-in-synchronous-communication") + **Table 2** Trace flag combination types + +| **Name**| **Value**| **Description**| +| -------- | -------- | -------- | +| HITRACE_FLAG_DEFAULT | 0 | Default flag. | +| HITRACE_FLAG_INCLUDE_ASYNC | 1 | Asynchronous call flag. By default, only synchronous calls are traced. If this flag is set, both synchronous and asynchronous calls will be traced. | +| HITRACE_FLAG_DONOT_CREATE_SPAN | 1 << 1 | No span flag. By default, spans are created within a trace of synchronous and asynchronous service calls. If this flag is set, no spans are created. | +| HITRACE_FLAG_TP_INFO | 1 << 2 | Trace point flag. By default, no trace point is added when trace is enabled. This flag is used for debugging. If this flag is set, trace points will be automatically added on the TX and RX sides of synchronous and asynchronous calls to output trace point and timestamp information. Trace points are classified into four types: client send (CS), server receive (SR), server send (SS), and client receive (CR). For a synchronous call, the output trace points are CS, SR, SS, and CR; for an asynchronous call, the output trace points are CS, SR, and SS. | +| HITRACE_FLAG_NO_BE_INFO | 1 << 3 | No begin/end flag. By default, information about the start and end of the trace task is printed. If this flag is set, information about the start and end of the trace task will not be printed.| +| HITRACE_FLAG_DONOT_ENABLE_LOG | 1 << 4 | Log association flag. If this flag is set, information about the trace task will not be printed. | +| HITRACE_FLAG_FAULT_TRIGGER | 1 << 5 | Failure trigger flag. This flag is reserved for future use. | +| HITRACE_FLAG_D2D_TP_INFO | 1 << 6 | Device-to-device trace point flag. It is a subset of **TP_INFO**. If this flag is set, trace points are added only for call chain trace between devices.| + + **Table 3** Trace point types + +| **Name**| **Value**| **Description**| +| -------- | -------- | -------- | +| HITRACE_TP_CS | 0 | CS trace point. | +| HITRACE_TP_CR | 1 | CR trace point. | +| HITRACE_TP_SS | 2 | SS trace point. | +| HITRACE_TP_SR | 3 | SR trace point. | +| HITRACE_TP_GENERAL | 4 | General trace points except CS, CR, SS, and SR.| + + **Table 4** Communication modes + +| **Name**| **Value**| **Description**| +| -------- | -------- | -------- | +| HITRACE_CM_DEFAULT | 0 | Default communication mode. | +| HITRACE_CM_THREAD | 1 | Inter-thread communication. | +| HITRACE_CM_PROCESS | 2 | Inter-process communication. | +| HITRACE_CM_DEVICE | 3 | Inter-device communication. | + + **Table 5** Description of C++ APIs + +| **Class**| **API**| **Description**| +| -------- | -------- | -------- | +| HiTraceChain | HiTraceId Begin(const std::string& name, int flags) | Starts HiTraceChain, generates a **HiTraceId** object, and sets it in the TLS of the calling thread.
Input arguments:
- **name**: name of the service process.
- **flags**: trace flags, which can be used in combination. For details, see Table 2.
Output arguments: none
Return value: a valid **HiTraceId** object if call chain trace is triggered successfully; returns an invalid object otherwise.
Note: In nested trace mode, an invalid object will be returned if trace is started at the nested layer.| +| | void End(const HiTraceId& id) | Stops HiTraceChain based on the **HiTraceId** object returned by the **Begin** API, and clears the **HiTraceId** object in the TLS of the calling thread.
Input arguments:
- **id**: **HiTraceId** object.
Output arguments: none
Return value: none| +| | HiTraceId GetId(); | Obtains the **HiTraceId** object from the TLS of the calling thread.
Input arguments: none
Output arguments: none
Return value: **HiTraceId** object in the contextual TLS of the calling thread.| +| | void SetId(const HiTraceId& id) | Purpose: Sets the **HiTraceId** object in the TLS of the calling thread.
Input arguments:
- **id**: **HiTraceId** object.
Output arguments: none
Return value: none| +| | void ClearId() | Clears the **HiTraceId** object in the TLS of the calling thread.
Input arguments: none
Output arguments: none
Return value: none| +| | HiTraceId CreateSpan() | Obtains the span ID from the current **HiTraceId** object.
Input arguments: none
Output arguments: none
Return value: current span ID.| +| | void Tracepoint(HiTraceTracepointType type, const HiTraceId& id, const char* fmt, ...) | Outputs HiTraceChain trace point information based on the information type. The information includes the timestamp and **HiTraceId** object of the span.
Input arguments:
- **type**: trace point type. For details, see Table 3.
- **id**: ID of the current span.
- **fmt**: string describing the format variable parameter.
- **args**: variable parameter.
Output arguments: none
Return value: none| +| | void Tracepoint(HiTraceCommunicationMode mode, HiTraceTracepointType type, const HiTraceId& id, const char* fmt, ...) | Outputs HiTraceChain trace point information based on the communication mode and information type. The information includes the timestamp and **HiTraceId** object of the span.
Input arguments:
- **mode**: communication mode. For details, see Table 4.
- **type**: trace point type. For details, see Table 3.
- **id**: ID of the current span.
- **fmt**: string describing the format variable parameter.
- **args**: variable parameter.
Output arguments: none
Return value: none| +| HiTraceId | HiTraceId(); | Represents the default constructor used to generate an invalid **HiTraceId** object.
Input arguments: none
Output arguments: none
Return value: none| +| | HiTraceId(const uint8_t* pIdArray, int len) | Represents the constructor used to create a **HiTraceId** object based on the specified byte array.
Input arguments:
- **pIdArray**: pointer to a byte array.
- **len**: length of the byte array.
Output arguments: none
Return value: none| +| | bool IsValid() | Checks whether the **HiTraceId** object is valid.
Input arguments: none
Output arguments: none
Return value: **true** if the **HiTraceId** object is valid; **false** otherwise.| +| | bool IsFlagEnabled(HiTraceFlag flag) | Checks whether the trace flag of the **HiTraceId** object is enabled.
Input arguments:
- **flag**: trace flag. For details, see the description in the **Begin** function.
Output arguments: none
Return value: **true** if the trace flag is enabled; **false** otherwise.| +| | void EnableFlag(HiTraceFlag flag) | Enables the trace flag of the **HiTraceId** object.
Input arguments:
- **flag**: trace flag. For details, see the description in the **Begin** function.
Output arguments: none
Return value: none| +| | int GetFlags() | Obtains the trace flag set in the **HiTraceId** object.
Input arguments: none
Output arguments: none
Return value: Returns the combination of trace flags. For details, see the description in the **Begin** function.| +| | void SetFlags(int flags) | Sets a trace flag in the **HiTraceId** object.
Input arguments:
- **flags**: combination of trace flags. For details, see the description in the **Begin** function.
Output arguments: none
Return value: none| +| | uint64_t GetChainId() | Obtains the call chain ID.
Input arguments: none
Output arguments: none
Return value: call chain ID.| +| | void SetChainId(uint64_t chainId) | Sets the call chain ID in the **HiTraceId** object.
Input arguments:
- **chainId**: call chain ID.
Output arguments: none
Return value: none| +| | uint64_t GetSpanId() | Obtains the span ID from the current **HiTraceId** object.
Input arguments: none
Output arguments: none
Return value: current span ID.| +| | void SetSpanId(uint64_t spanId) | Sets the span ID in the **HiTraceId** object.
Input arguments:
- **spanId**: span ID.
Output arguments: none
Return value: none| +| | uint64_t GetParentSpanId() | Obtains the parent span ID from the current **HiTraceId** object.
Input arguments: none
Output arguments: none
Return value: parent span ID.| +| | void SetParentSpanId(uint64_t parentSpanId) | Sets the parent span ID in the **HiTraceId** object.
Input arguments:
- **parentSpanId**: parent span ID.
Output arguments: none
Return value: none| +| | int ToBytes(uint8_t* pIdArray, int len) | Converts the **HiTraceId** object into a byte array to facilitate caching or communication transfer.
Input arguments:
- **pIdArray**: pointer to a byte array. The minimum length of the byte array is **HITRACE_ID_LEN**.
- **len**: length of the byte array.
Output parameters:
- **pIdArray**: pointer to a byte array. If the object is valid, the object data after conversion is stored.
Return value: a value greater than **0** (indicating a valid array of object data) if the conversion is successful; **0** otherwise.| + + +### Call Chain Processing + +Inter-device, inter-process, and inter-thread calls are implemented through the communication mechanism. HiTraceChain requires transfer of **traceid** in the communication mechanism. + +Some built-in communication mechanisms (such as ZIDL) of OpenHarmony already support the transfer of **traceid**. + +The following figure shows the process of transferring **traceid** in synchronous call. The process of transferring **traceid** in asynchronous call is similar. + + Extended communication mechanisms can also follow this implementation. + **Figure 5** Call chain trace in synchronous communication + ![](figures/call-chain-trace-in-synchronous-communication.png "call-chain-trace-in-synchronous-communication") The process is as follows: -1. The service module on the client calls the **begin\(\)** function to start call chain tracing. -2. The service module on the client synchronously calls the **transact** function to the communication component on the client. -3. The communication component on the client performs the following: - 1. Obtains **traceid** from the TLS of the calling thread. - 2. Generates child **traceid**. - 3. Writes child **traceid** into the transaction data \(synchronous communication data\). - 4. Performs Client Send \(CS\) tracing. - 5. Sends communication data to the communication component on the server. - -4. On receiving the communication data, the communication component on the server performs the following: - 1. Obtains **traceid** from the data message package. - 2. Sets **traceid** in the TLS of the calling thread. - 3. Performs Server Receive \(SR\) tracing. - 4. Synchronously call the **onTransact** callback to the service module on the server. - -5. The service module on the server processes the service and sends the transact reply message carrying the processing result to the communication component. -6. The communication component on the server performs the following: - 1. Performs Server Send \(SS\) tracing. - 2. Sends communication data to the communication component on the client. - 3. Clears **traceid** from the TLS of the calling thread. - -7. On receiving the communication data, the communication component on the client performs the following: - 1. Performs Client Receive \(CR\) tracing. - 2. Sends a transact reply response to the service module on the client. - -8. The service module on the client processes the transact reply response. -9. When the process ends, the service module on the client calls the **end\(\)** function to stop call chain tracing. - -## How to Develop - -### C++ - -1. Develop the source code. +1. The service module on the client calls the **begin()** function to start call chain trace. - Include the **hitracechain** header file in the class definition header file or class implementation source file. For example: +2. The service module on the client synchronously calls the **transact** function to the communication component on the client. - ``` - #include "hitrace/tracechain.h" - ``` +3. The communication component on the client performs the following: + 1. Obtains **traceid** from the TLS of the calling thread. + 2. Generates child **traceid**. + 3. Writes child **traceid** into the transaction data (synchronous communication data). + 4. Performs CS trace. + 5. Sends communication data to the communication component on the server. - Add the code to start and stop call chain tracing in the class implementation source file. +4. On receiving the communication data, the communication component on the server performs the following: + 1. Obtains **traceid** from the data message package. + 2. Sets **traceid** in the TLS of the calling thread. + 3. Performs SR trace. + 4. Synchronously calls the **onTransact** callback to the service module on the server. - ``` - using namespace OHOS::HiviewDFX; - auto traceId = HiTraceChain::Begin("MyServiceFlow", HITRACE_FLAG_DEFAULT); - ... - HiTraceChain::End(traceId); - ``` +5. The service module on the server processes the service and sends the transact reply message carrying the processing result to the communication component. -2. Configure compilation information. Specifically, add the subsystem SDK dependency to **BUILD.gn**. +6. The communication component on the server performs the following: + 1. Performs SS trace. + 2. Sends communication data to the communication component on the client. + 3. Clears **traceid** from the TLS of the calling thread. - ``` - external_deps = [ "hiviewdfx:libhitracechain" ] - ``` +7. On receiving the communication data, the communication component on the client performs the following: + 1. Performs CR trace. + 2. Sends a transact reply response to the service module on the client. +8. The service module on the client processes the transact reply response. -### C +9. When the process ends, the service module on the client calls the **end()** function to stop call chain trace. -1. Develop the source code. - Include the **hitracechain** header file in the source file. - - ``` - #include "hitrace/tracechain.h" - ``` - - Add the code to start and stop call chain tracing in the class implementation source file. - - ``` - HiTraceIdStruct traceId = HiTraceChainBegin("MyServiceFlow", HITRACE_FLAG_DEFAULT); - ... - HiTraceChainEnd(traceId); - ``` - -2. Configure compilation information. Specifically, add the subsystem SDK dependency to **BUILD.gn**. - - ``` - external_deps = [ "hiviewdfx:libhitracechain" ] - ``` +## How to Develop +### **C++** + +1. Develop the source code. + Include the **hitracechain** header file in the class definition header file or class implementation source file. For example: + + ``` + #include "hitrace/tracechain.h" + ``` + + Add the code to start and stop call chain trace in the class implementation source file. + + ``` + using namespace OHOS::HiviewDFX; + auto traceId = HiTraceChain::Begin("MyServiceFlow", HITRACE_FLAG_DEFAULT); + ...... + HiTraceChain::End(traceId); + ``` + +2. Configure compilation information. Specifically, add the subsystem SDK dependency to **BUILD.gn**. + + ``` + external_deps = [ "hiviewdfx:libhitracechain" ] + ``` + + +### **C** + +1. Develop the source code. + Include the **hitracechain** header file in the source file. + + ``` + #include "hitrace/tracechain.h" + ``` + + Add the code to start and stop call chain trace in the class implementation source file. + + ``` + HiTraceIdStruct traceId = HiTraceChainBegin("MyServiceFlow", HITRACE_FLAG_DEFAULT); + ...... + HiTraceChainEnd(traceId); + ``` + +2. Configure compilation information. Specifically, add the subsystem SDK dependency to **BUILD.gn**. + + ``` + external_deps = [ "hiviewdfx:libhitracechain" ] + ``` diff --git a/en/device-dev/subsystems/subsys-dfx-hitracemeter.md b/en/device-dev/subsystems/subsys-dfx-hitracemeter.md index e807315828..bb609b7369 100644 --- a/en/device-dev/subsystems/subsys-dfx-hitracemeter.md +++ b/en/device-dev/subsystems/subsys-dfx-hitracemeter.md @@ -2,7 +2,7 @@ ## Introduction -HiTraceMeter is the OpenHarmony subsystem that provides APIs to implement call chain trace throughout a service process. With HiTraceMeter, you can quickly obtain the run log specific to the call chain of a service process and locate faults in inter-device, inter-process, or inter-thread communications. HiTraceMeter supports event logging in user mode and can collect trace data in user mode and kernel mode for performance tracing and analysis. +HiTraceMeter is the OpenHarmony subsystem that provides APIs to implement call chain trace throughout a service process. With HiTraceMeter, you can quickly obtain the run log specific to the call chain of a service process and locate faults in inter-device, inter-process, or inter-thread communications. HiTraceMeter supports event logging in user mode and can collect trace data in user mode and kernel mode for performance trace and analysis. ## Basic Concepts @@ -12,7 +12,7 @@ The HiTraceMeter subsystem consists of three parts: - hitrace CLI tool for data collection - smartperf tool for graphical data analysis -Wherein, HiTraceMeter APIs and the hitrace CLI tool run on the device side, and the smartperf tool runs on the PC side. HiTraceMeter APIs are provided in C++ and JS for event logging, which aims to generate the trace data necessary for performance tracing and analysis during the development process. +Wherein, HiTraceMeter APIs and the hitrace CLI tool run on the device side, and the smartperf tool runs on the PC side. HiTraceMeter APIs are provided in C++ and JS for event logging, which aims to generate the trace data necessary for performance trace and analysis during the development process. The hitrace CLI tool is used to collect trace data. It captures trace data flows and saves the data as a text file. @@ -348,4 +348,4 @@ You can set **-t** to **60** and **-b** to **204800** to increase the trace time # Reference -For details about HiTraceMeter, see [hiviewdfx_hitrace: Lightweight Distributed Tracing](https://gitee.com/openharmony/hiviewdfx_hitrace). +For details about HiTraceMeter, see [hiviewdfx_hitrace: Lightweight Distributed Trace](https://gitee.com/openharmony/hiviewdfx_hitrace). diff --git a/en/device-dev/subsystems/subsys-dfx-overview.md b/en/device-dev/subsystems/subsys-dfx-overview.md index b7487c1063..623ed60d36 100644 --- a/en/device-dev/subsystems/subsys-dfx-overview.md +++ b/en/device-dev/subsystems/subsys-dfx-overview.md @@ -1,36 +1,47 @@ -# DFX Overview +# DFX Overview -[Design for X](https://en.wikipedia.org/wiki/Design_for_X) \(DFX\) refers to the software design that aims to improve the quality attributes in OpenHarmony. It mainly consists of two parts: design for reliability \(DFR\) and design for testability \(DFT\). + +## Introduction + +[Design for X](https://en.wikipedia.org/wiki/Design_for_X) \(DFX\) refers to the software design that aims to improve the quality attributes in OpenHarmony. It mainly consists of two parts: design for reliability \(DFR\) and design for testability \(DFT\). The DFX subsystem provides the following functions: -- HiLog: implements the logging function. It is applicable to mini-system devices \(reference memory ≥ 128 KiB\), small-system devices \(reference memory ≥ 1 MiB\), and standard-system devices \(reference memory ≥ 128 MB\). -- HiTraceChain: implements distributed call chain tracing. It is applicable to standard-system devices \(reference memory ≥ 128 MiB\). +- HiLog: implements the logging function. It is applicable to mini-system devices \(reference memory ≥ 128 KiB\), small-system devices \(reference memory ≥ 1 MiB\), and standard-system devices \(reference memory ≥ 128 MiB\). + +- HiTraceChain: implements distributed call chain trace. It is applicable to standard-system devices \(reference memory ≥ 128 MiB\). + - HiTraceMeter: implements performance trace. It is applicable to standard-system devices \(reference memory ≥ 128 MiB\). + - HiCollie: implements thread suspension detection. It is applicable to standard-system devices \(reference memory ≥ 128 MiB\). + - HiSysEvent: implements system event logging. It is applicable to standard-system devices \(reference memory ≥ 128 MiB\). + - HiDumper: exports system information. It is applicable to standard-system devices \(reference memory ≥ 128 MiB\). -- FaultLogger: implements crash detection. It is applicable to standard-system devices \(reference memory ≥ 128 MiB\). + +- Faultlogger: implements crash detection. It is applicable to standard-system devices \(reference memory ≥ 128 MiB\). + - Hiview: implements device maintenance across different platforms. It is applicable to standard-system devices \(reference memory ≥ 128 MiB\). -- HiAppEvent and HiChecker are only hap developer oriented。 + +- HiAppEvent and HiChecker are applicable only for HAP developers. ![dfx features overview](figure/dfx-overview.png) -## Basic Concepts +## Basic Concepts **Logging** Logging means to record the log information generated during system running so you can understand the running process and status of the system or applications. -**Distributed call chain tracing** +**Distributed call chain trace** -In a distributed system, the initiation of a service may involve multiple software modules, with control commands and data transmitted over intra-process, inter-process, and inter-device communication interfaces. To help you understand such complex communication processes and locate service faults efficiently, the DFX subsystem provides a distributed call chain tracing framework. +In a distributed system, the initiation of a service may involve multiple software modules, with control commands and data transmitted over intra-process, inter-process, and inter-device communication interfaces. To help you understand such complex communication processes and locate service faults efficiently, the DFX subsystem provides a distributed call chain trace framework. **Thread suspension detection** -If a thread is trapped in an infinite loop or the kernel state \(for example, Uninterruptable Sleep, Traced, Zombie, or synchronous wait\) when it is running, the thread cannot respond to normal service requests and cannot detect and recover from faults by itself. To detect and locate this type of faults, the DFX subsystem provides a simple watchdog mechanism by inserting detection probes to the process nodes that are prone to suspension. This ensures that suspension faults can be detected and logs can be collected. +If a thread is trapped in an infinite loop or the kernel state (for example, Uninterruptable Sleep, Traced, Zombie, or synchronous wait) when it is running, the thread cannot respond to normal service requests and cannot detect and recover from faults by itself. To detect and locate this type of faults, the DFX subsystem provides a simple watchdog mechanism by inserting detection probes to the process nodes that are prone to suspension. This ensures that suspension faults can be detected and logs can be collected. -**Event logging** +**Logging** Event logging means to collect and log events reported during system running. The log information will help you better analyze the product usage. -- GitLab