Providing application error data for use by third party library development systems

JP7633398B2Active Publication Date: 2025-02-19GOOGLE LLC
View PDF 4 Cites 0 Cited by

Patent Information

Application Number
JP2023524718
Authority / Receiving Office
JP · JP
Patent Type
Patents
Current Assignee / Owner
Filing Date
2020-11-09
Publication Date
2025-02-19
Estimated Expiration
2040-11-09

AI Technical Summary

Benefits of technology

【0006】 1つ以上の例の詳細が、添付の図面および以下の説明に記載される。本開示の他の特徴、目的、および利点は、説明および図面、および特許請求の範囲から明らかになろう。

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure 0007633398000001
    Figure 0007633398000001
  • Figure 0007633398000002
    Figure 0007633398000002
  • Figure 0007633398000003
    Figure 0007633398000003
Patent Text Reader

Abstract

An exemplary method includes an application server system receiving, from one or more client computing devices, application error data associated with at least one error that occurred during execution of at least one application; and receiving mapping data providing a mapping between (i) library-dependent source code of the application and (ii) at least one third-party library, wherein the library-dependent source code is loaded from the at least one third-party library during execution of the application, the method further including determining a match between the library-dependent source code and at least one portion of the application error data based on the application error data and the mapping data, attributing the at least one error to the at least one third-party library, generating library error data associated with the at least one third-party library, and transmitting the library error data to at least one third-party library development system.
Need to check novelty before this filing date? Find Prior Art

Description

[Background technology]

[0001] background Existing computing devices, including mobile computing devices, are configured to run any number of different applications (e.g., mobile applications, games) over time. Developers of various different applications may use one or more application development systems to develop and distribute these applications, which may then be executed by client computing devices associated with end users. Often, one or more centralized application servers may store these applications and corresponding metadata after they are developed, and end users may download and use these applications on their respective client computing devices. Unfortunately, in certain circumstances, any given application may experience errors during its execution, and in some cases may even crash or abort execution based on the severity or type of error that occurs. Summary of the Invention [Means for solving the problem]

[0002] overview The present disclosure is directed to providing one or more portions of application error data for use by a third party library development system that develops third party libraries used by one or more applications based on one or more errors that occur during execution of these applications. In accordance with the techniques of the present disclosure, an application server system may be configured to process application error data associated with such errors that occur during execution of at least one application on one or more client computing devices and output at least a portion of such data included within the library error data to the third party library development system. In such a manner, a library developer of one or more third party libraries may receive and review such library error data, which may be relevant to the execution of corresponding library-dependent code included in or used by the application during execution. By reviewing and analyzing the library error data, the third party library developer and / or the third party library development system may attempt to identify any coding faults or other issues in the third party libraries that may have caused run-time errors during application execution.

[0003] In one example, a method includes an application server system including one or more processors receiving, from one or more client computing devices, application error data associated with at least one error occurring during execution of at least one application on the one or more client computing devices, and the application server system receiving mapping data providing a mapping between (i) library-dependent source code of the at least one application and (ii) at least one third party library, where the library-dependent source code is loaded from the at least one third party library during execution of the at least one application, the method further includes the application server system determining a match between the library-dependent source code and at least one portion of the application error data based on the application error data and the mapping data. The exemplary method further includes, in response to determining the match, the application server system attributing the at least one error occurring during execution of the at least one application to the at least one third party library, and the application server system generating library error data associated with the at least one third party library, where the library error data includes at least one portion of the application error data, the method further includes the application server system transmitting the library error data to at least one third party library development system that develops the at least one third party library.

[0004] In another example, an application server system includes at least one processor and at least one computer readable storage device configured to store instructions executable by the at least one processor to receive, from one or more client computing devices, application error data associated with at least one error that occurred during execution of at least one application on the one or more client computing devices; and receive mapping data providing a mapping between (i) library-dependent source code of the at least one application and (ii) at least one third party library, the library-dependent source code being loaded from the at least one third party library during execution of the at least one application. The instructions are further executable by the at least one processor to determine a match between the library-dependent source code and at least one portion of the application error data based on the application error data and the mapping data, and in response to determining a match, to attribute at least one error that occurred during execution of the at least one application to at least one third party library and generate library error data associated with the at least one third party library, the library error data including at least one portion of the application error data, and the instructions are further executable by the at least one processor to send the library error data to at least one third party library development system that develops the at least one third party library.

[0005] In another example, a computer-readable storage device stores instructions that, when executed, cause at least one processor to perform operations. These example operations include receiving, from one or more client computing devices, application error data associated with at least one error occurring during execution of at least one application on the one or more client computing devices, and receiving mapping data providing a mapping between (i) library-dependent source code of the at least one application and (ii) at least one third party library, where the library-dependent source code is loaded from the at least one third party library during execution of the at least one application, the example operations further include determining a match between the library-dependent source code and at least one portion of the application error data based on the application error data and the mapping data. The example operations further include attributing, in response to determining a match, the at least one error occurring during execution of the at least one application to the at least one third party library, and generating library error data associated with the at least one third party library, where the library error data includes at least one portion of the application error data, the example operations further include transmitting the library error data to at least one third party library development system that develops the at least one third party library.

[0006] The details of one or more examples are set forth in the accompanying drawings and the description below. Other features, objects, and advantages of the disclosure will become apparent from the description and drawings, and from the claims. [Brief description of the drawings]

[0007] [Figure 1]FIG. 1 is a block diagram illustrating an example distributed system including an application server system configured to process application error data for use by a third party library development system in accordance with one or more aspects of the present disclosure. [Diagram 2] FIG. 1 is a block diagram illustrating another example distributed system including an application server system configured to process application crash report data for use by a third party software development kit (SDK) development system in accordance with one or more aspects of the present disclosure. [Diagram 3] FIG. 1 is a block diagram illustrating an example application server system in accordance with one or more aspects of the present disclosure. [Figure 4] FIG. 1 is a conceptual diagram illustrating example stack trace data including both library-dependent source code and application-dependent source code in accordance with one or more aspects of the present disclosure. [Diagram 5] FIG. 1 is a conceptual diagram illustrating example mapping data that provides a mapping between one or more portions of a library-dependent source code of an application and at least one third-party library into which the library-dependent source code is loaded during execution of the application, in accordance with one or more aspects of the present disclosure. [Figure 6] FIG. 1 is a conceptual diagram illustrating example stack trace data included in an SDK crash report provided to one or more SDK development systems in accordance with one or more aspects of the present disclosure. [Figure 7] FIG. 13 is a conceptual diagram illustrating another example of stack trace data included in an SDK crash report provided to one or more SDK development systems in accordance with one or more aspects of the present disclosure. [Figure 8] FIG. 11 is a conceptual diagram illustrating a further example of stack trace data included in an SDK crash report provided to one or more SDK development systems in accordance with one or more aspects of the present disclosure. [Figure 9]1 is a screen diagram illustrating an example graphical user interface that may be displayed in one or more third party library development systems based on data provided by an application server system in accordance with one or more aspects of the present disclosure. [Figure 10] A screen diagram illustrating another example graphical user interface that may be displayed in one or more third party library development systems based on data provided by an application server system in accordance with one or more aspects of the present disclosure. [Figure 11] 5 is a flow diagram illustrating an example operation of an application server system in accordance with one or more aspects of the present disclosure. DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS

[0008] Detailed Description 1 is a block diagram illustrating an example distributed system 100 including an application server system 102 configured to process application error data for use by one or more third party library development systems 132 in accordance with one or more aspects of the present disclosure. In the example of FIG. 1, system 100 includes application server system 102, one or more application development systems 128, one or more third party library development systems 132, and one or more client computing devices 140. Application server system 102, application development systems 128, third party library development systems 132, and client computing devices 140 may be communicatively coupled to each other via one or more networks 126, which may include one or more wireless and / or wired networks.

[0009] The application server system 102, the application development system 128, and the third party library development system 132 may each include one or more computing devices or servers, each of which includes one or more processors. The client computing devices 140 may also include one or more processors. Examples of the client computing devices 140 include, but are not limited to, a mobile phone, a tablet computer, a personal digital assistant (PDA), a laptop computer, a portable gaming device, a portable media player, a wearable computing device (e.g., a watch, a wrist-worn computing device, a head-worn computing device), a television platform, or other types of computing devices. The application server system 102, the application development system 128, the third party library development system 132, and the client computing devices 140 may each include one or more communication units (as shown in FIG. 3). These communication units may transmit and / or receive data from one or more other computing devices or systems. In some examples, the communication units may support wireless and / or wired communication and transmit and / or receive data using any of a variety of communication protocols.

[0010] As mentioned above, the client computing device 140 is configured to execute any number of one or more applications 104 (e.g., mobile applications, games) over time. A variety of different application developers may develop and distribute such applications 104 using the application development system 128, which may then be executed by the client computing device 140. In many cases, as shown in FIG. 1, the application development system 128 may store a local copy of the application 104 and may also distribute a copy of the application 104 for storage on the application server system 102. An end user of the client computing device 140 may then download and execute the application 104 on the client computing device 140, which may have been developed by any number of different application developers using the application development system 128. The application 104 may perform various functions or access one or more services for the client computing device 140. Email applications, camera applications, calendar applications, messaging applications, social media applications, travel applications, games applications, stock applications, and weather applications are all examples of applications 104 .

[0011] In some circumstances, one or more of the applications 104 may experience an error during execution on the client computing device 140 and may even crash or abort execution in some cases based on the severity or type of error that occurs. In these circumstances, when an application has an error or crashes during execution on one or more of the client computing devices, a runtime system of the client computing device 140 may generate an error report that is sent to one or more of the application server system 102 and / or application development system 128 associated with the application. In such aspects, an application developer of the application may receive and review these error reports via the application development system 128 in an attempt to identify any coding faults or other problems in the application that may have caused the runtime error on the client computing device 140.

[0012] In many cases, an application 104 includes both application-dependent source code and library-dependent source code. Application-dependent source code is typically source code developed specifically for the application 104 (e.g., by an application developer using application development system 128). Library-dependent source code is typically library-based code developed (e.g., by a library developer using third-party library development system 132) for incorporation into a third-party library 138 that may be incorporated into or otherwise used by various different ones of the applications 104. As a result, a large percentage of the source code of an application 104 may actually include library-dependent source code. Thus, source code that causes an application 104 to experience errors and crashes during execution may potentially include one or more portions of library-dependent source code included within the application 104.

[0013] Faults present in such library-dependent source code may cause any of the applications 104 that include such code to experience errors or even crashes. Traditionally, as described above, application error data 122 associated with errors in or crashes of applications 104 is provided only to the application development systems 128 in which those applications 104 were developed. However, this application error data 122 has not traditionally been provided to third party library development systems 132 so that library developers could have access to such application error data 122 and assess whether any of the third party libraries 138 developed by the library developers may be the cause of the application error or crash.

[0014] Thus, in accordance with the techniques of this disclosure, the application server system 102 may be configured to process application error data 122 associated with errors occurring during one or more executions of the applications 104 on one or more of the client computing devices 140, and output at least a portion of such data included in library error data 124 to a third party library developer using a third party library development system 132. In this manner, a library developer of one or more third party libraries 138 may receive and review such library error data 124, which may be relevant to the execution of library-dependent code from the third party libraries 138 included in the application 104 for execution. By reviewing and analyzing the library error data 124, the third party library developer and / or the third party library development system 132 may attempt to identify any coding faults or other problems in the third party libraries 138 that may have caused run-time errors during execution of the application 104 on the client computing devices 140.

[0015] As shown in FIG. 1 and described in further detail below, the application server system 102 includes various functional modules. These include a library error data generator 110, an application error processing module 120, and a library error reporting module 121. The library error data generator 110 includes a library attribution module 114, a scrubbing module 116, a clustering module 118, and an optional de-obfuscation module 112. These modules may individually or collectively perform the operations described herein using any combination of software, hardware, and / or firmware resident and / or executing on the application server system 102. The application server system 102 may execute these modules using one or more processors. In some cases, the application server system 102 may execute these modules as one or more virtual machines executing on the underlying hardware. In some cases, one or more of these may execute as services of an operating system or computing platform.

[0016] As described in further detail below, the application error handling module 120 of the application server system 102 may receive, from the application error reporting module 142 of the client computing device 140, application error data 122 associated with at least one error that occurred during execution of one or more applications 104 on the client computing device 140. Accordingly, the application error reporting module 142 is configured to transmit such application error data 122 associated with the execution of the application 104 to the application error handling module 120 of the application server system 102.

[0017] In the event that one or more of the applications 104 experiences a crash or other unexpected termination, the application error data 122 may include application crash report data associated with at least one error that crashed one or more of the applications 104. The application crash report data may include stack trace data representing nested function calls of the application 104, where at least one portion of the application crash report data includes at least one portion of the stack trace data. The nested function calls of the stack trace data are calls that may have led, for example, from a program loader to where the crash occurred during the respective execution of one or more of the applications 104. FIG. 4 illustrates an example of such stack trace data.

[0018] The application server system 102 also receives (e.g., from the application development system 128) mapping data 108 that provides a mapping between (i) the library-dependent source code of the application 104 and (ii) at least one third-party library of the third-party libraries 138 into which the library-dependent source code is loaded during execution of the application 104. In some cases, the application development system 128 may provide the application data 106 to the application server system 102, where the application data 106 may include metadata associated with the application 104. For example, the application data 106 may include the mapping data 108. The application data 106 may also include other information associated with the application 104, such as application version number information, information associated with supported operating systems of the application 104 (e.g., version numbers of one or more operating systems), information associated with supported device types of client computing devices, de-obfuscation data or files associated with the code of the application 104, etc.

[0019] The application server system 102 determines a match between the library-dependent source code and at least one portion of the application error data 122 based on the application error data 122 and the mapping data 108. For example, the library attribution module 114 of the library error data generator 110 on the application server system 102 may determine the match. If the application error data 122 provided by the application error reporting module 142 includes stack trace data, the library attribution module 114 may be configured to determine the match by matching one or more patterns of the library-dependent source code with one or more code locations in the at least one portion of the stack trace data based on the stack trace data and the mapping data 108. As a result, the library attribution module 114 may identify a mapping between code in the application 104 and any of the third-party libraries 138 from which the code is loaded. This mapping provides a mechanism for the library attribution module 114 to determine whether a stack trace traverses any third-party library-dependent source code, and the library attribution module 114 can attribute one or more errors (e.g., an application crash) to identified ones of the third-party libraries 138.

[0020] In response to determining a match, library attribution module 114 may attribute at least one error that occurred during execution of application 104 to at least one third party library included in third party libraries 138. Library attribution module 114 may then generate library error data 124 associated with the at least one third party library, where library error data 124 includes at least one portion of application error data 122. For example, if application error data 122 includes application crash report data, library error data 124 may include library crash report data that includes at least a portion of the application crash report data.

[0021] After the library attribution module 114 generates the library error data 124, the library error reporting module 121 of the application server system 102 transmits the library error data 124 over the network 126 to one or more of the one or more third party library development systems 132 that develop at least one third party library. The at least one third party library is included in the third party library 138. For example, the library error reporting module 121 may transmit the library error data 124 to one or more library console interfaces 134 of or associated with the third party library development systems 132. The library console interfaces 134 may, in some examples, store the library error data 124 locally on the third party library development systems 132. The library console interfaces 134 may also output the library error data 124 for display on one or more display devices 130, as shown in the examples of FIGS. 9-10. The display device 130, in some examples, may include one or more of a liquid crystal display (LCD), a dot matrix display, a light emitting diode (LED) display, an organic light emitting diode (OLED) display, a micro light emitting diode (microLED) display, an active matrix organic light emitting diode (AMOLED) display, e-ink, or similar monochrome or color display capable of outputting visual information to a third party developer using the third party library development system 132.

[0022] In some examples, the library error reporting module 121 may include or provide an application programming interface (API) that is called by the library console interface 134 to output the library error data 124 for display on the display device 130. The application server system 102 may be configured to send the library error data 124 to the third party library development system 132 via the library error reporting module 121. The third party library development system 132 may execute the library console interface 134 to provide a graphical user interface (e.g., in a browser) that may output the library error data 124 for display to one or more developers using the display device 130. The library console interface 134 may, in some cases, include executable code that is provided by the application server system 102 to the third party library development system 132 for execution.

[0023] In some cases, the third party library development system 132 may also store library data 136, which may include metadata associated with the third party library 138. For example, as further described with reference to FIG. 2, the library data 136 may include de-obfuscation data usable by the optional de-obfuscation module 112 of the application server system 102 to de-obfuscate one or more portions of the application error data 122 (e.g., stack trace data) received from the client computing device 140, which are then used by the library error data generator 110 to generate the library error data 124. This de-obfuscation data is associated with the library-dependent source code of the application 104. In some cases, the application data 106 provided by the application development system 128 to the application server system 102 may also include de-obfuscation data usable by the de-obfuscation module 112 to de-obfuscate one or more portions of the application error data 122, which are associated with the application-dependent source code of the application 104.

[0024] In many cases, the application error data 122 (e.g., stack trace data) provided by the application error reporting module 142 may include application-specific data for the application 104 and / or sensitive internal data associated with the application 104. In addition, the application error data 122 may have variability associated with execution errors of different ones of the applications 104 because different applications may utilize potentially faulty library-dependent source code in different contexts. Furthermore, the application error data 122 may in some cases include library-dependent source code instructions for different ones of the third party libraries. As a result, in these cases, the library error data generator 110 may decide to remove one or more portions of the application error data 122 when generating the library error data 124 provided to the third party library development system 132.

[0025] For example, scrubbing module 116 of library error data generator 110 may be configured to remove all application-dependent information (e.g., application-dependent source code) from application error data 122 when generating library error data 124. As a result, third-party library development system 132 does not receive any such application-dependent information in library error data 124 for use or display by library console interface 134.

[0026] If application error data 122 includes library-dependent source code for multiple different ones of third party libraries 138 developed by third party library development system 132, scrubbing module 116 may also be configured to remove one or more portions of such library-dependent source code, such as, for example, any library-dependent source code not associated with an identified third party library that library attribution module 114 attributes to the current error, when generating library error data 124. For example, application error data 122 may have at least one portion of data including first library-dependent source code associated with a first one of the third party libraries 138, and application error data 122 may also have at least one portion of data including second library-dependent source code associated with a second one of the third party libraries 138. If the library attribution module 114 attributes at least one error associated with the application error data 122 to a first third party library, the scrubbing module 116 may remove the second library-dependent source code from the application error data 122 (e.g., stack trace data) when generating the library error data 124, as shown in FIGS. 7-8.

[0027] 1, the library error data generator 110 also includes a clustering module 118. As described in further detail below, in various examples, the clustering module 118 may be configured to cluster portions of the application error data 122 (e.g., stack trace data) generated by multiple different ones of the applications 104 that may be developed by the application development system 128. These applications 104 may be developed by different application developers. The clustered portions of the application error data 122 may include, for example, clustered or aggregated groups of different application error reports having similar features or characteristics. Because the application error reporting modules 142 of the client computing devices 140 are all configured to provide the application error data 122 to the application server system 102, where the application error data 122 is associated with errors occurring during the execution of potentially multiple different applications 104 developed by different application developers, the application server system 102 may be able to aggregate and cluster such data into the library error data 124. As a result, library developers developing third party libraries 138 may view such aggregated and / or clustered information about the libraries they develop via the library console interface 134.

[0028] For example, if multiple different applications 104 among the applications 104 developed by multiple different application developers each include a potentially faulty third-party library included in a third-party library 138 provided by a third-party library development system 132, one or more of these applications 104 may experience similar errors or crashes during execution. As a result, similar application error data 122 may be generated when errors occur in such applications 104, and the clustering module 118 of the application server system 102 may identify similar library-dependent source code in the portions of the application error data 122 that correspond to each of the errors occurring during execution of these applications 104. The library attribution module 114 may then generate library error data 124 including clustered error data (e.g., stack trace data) that identifies library-dependent source code associated with the potentially faulty third-party library. The library error reporting module 121 may transmit such library error data 124 to the third-party library development system 132 so that a library developer of this library can view the library error data 124 using the library console interface 134. This library error data 124 may also include additional information that may be useful to a developer, such as the number of different applications that experience errors when using this library, the type of client computing device 140 used while running the application, the operating system of the client computing device 140, and application or library version numbers.

[0029] As outlined in further detail below, the scrubbing module 116 may first remove application-dependent and / or other library-dependent source code information from the application error data 122, as described above, and the clustering module 118 may then cluster similar application error data 122 for one or more applications into library error data 124. In some cases, to identify similar features or characteristics of the application error data 122 generated for different applications, the clustering module 118 may generate fingerprint identifiers (e.g., hash identifiers) for portions of the application error data 122 generated for the different applications 104 in which errors occur, and these portions of the application error data 122 may be stored or included in the library error data 124. The clustering module 118 may then cluster the application error data 122 as it generates the library error data 124 (e.g., in real time, once or more times during the day via batch processing of the application error data 122) based on the matching fingerprint identifiers for these portions of the application error data 122. For example, using the example outlined above, multiple different applications 104 that include a potentially faulty third-party library may each be associated with portions of application error data 122 that include or identify similar portions of the library-dependent source code of the library. Clustering module 118 may generate similar or matching fingerprint identifiers for these portions of application error data 122, which may identify or be associated with this portion of the library-dependent source code. Clustering module 118 may then include this portion of application error data 122 that includes or matches the library-dependent source code in library error data 124. Library error data 124 may also include information indicating the number of applications that include this code and experienced the error.

[0030] For example, the clustering module 118 may determine a first fingerprint identifier associated with at least one portion of the application error data included in the library error data 124. The at least one portion may include library-dependent source code. The clustering module 118 may also determine a match between the first fingerprint identifier and a second fingerprint identifier associated with previously generated library error data included in the library error data 124, the previously generated library error data being associated with at least one third party library. The previously generated library error data also includes at least one portion of the application error data (e.g., the same or similar library-dependent source code) associated with at least one error that occurred during one or more executions of the application 104 on the client computing device 140. In response to determining a match, the clustering module 118 may cluster the library error data with the previously generated library error data to generate clustered library error data in the library error data 124, the clustered library error data being associated with at least one third party library. In some cases, as described in more detail below, the clustered library error data indicates at least some applications that are affected by at least one error. The library error reporting module 121 may then send the clustered library error data to a third-party library development system 132.

[0031] In some cases, the clustering module 118 may perform one or more application anonymization functions regarding the applications and application developers of the application development system 128. For example, when including library error information associated with one or more of the applications 104 in the library error data 124, the clustering module 118 may refrain from including any specific or identifying information regarding which of the applications 104 are associated with the library error data 124. Instead, the clustering module 118 may include only generic information regarding such applications 104, such as the number of applications in general. In some cases, the clustering module 118 may include further information, such as the type of application, one or more version numbers of one or more third party libraries 138, application information, at least one version number of at least one operating system executed by the client computing device 140, information regarding the client computing device 140 (e.g., operating system or device type information), depending on the type and details of information included in the application error data 122 provided by the client computing device 140 to the application server system 102 (e.g., by the application error reporting module 142). Additionally, as described in further detail below, the clustering module 118 may also include in the library error data 124 one or more of the number of applications 104 affected by at least one error over a period of time (e.g., 30 days, 60 days, all cumulative time to date, etc.), the number of users affected by at least one error over that period of time, or the number of occurrences of at least one error over that period of time.

[0032] In some cases, the clustering module 118 may perform one or more application thresholding functions. For example, the clustering module 118 may only include error data affecting more than a threshold number of applications in the library error data 124 to potentially further preserve the anonymity of the applications experiencing the errors. In some cases, only errors (e.g., crashes) observed across more than this threshold number of applications may be reported to the third party library development system 132. These errors may relate to common issues or bugs of particular interest to library developers of one or more third party libraries associated with the library error data 124. Thus, in one or more examples, the application server system 102 may determine that the number of applications 104 affected by at least one error exceeds a threshold number, and the library error reporting module 121 may be configured to only transmit the clustered library error data 124 in response to determining that the number of applications affected by at least one error exceeds the threshold number. In some cases, this threshold number may be a predetermined or default number of applications.

[0033] In accordance with the techniques disclosed herein, storage of certain data, such as application data 106, library data 136, application error data 122, and / or library error data 124, may occur in various examples only in response to a computing device or system (e.g., client computing device 140 and / or system 102, 128, 132) receiving an affirmative agreement or response from one or more users, such as one or more application or library developers or end users. Users may be given controls that allow them to make selections both as to whether and when the systems, programs, or features described herein may enable the collection and / or storage of information and / or as to whether and when the systems, programs, or features described herein may enable the transmission of content or communications between devices. Additionally, as discussed above, certain data (e.g., library error data 124) may be processed in one or more ways before storage or use such that identifiable information associated with application 104 is removed.

[0034] 2 is a block diagram illustrating another example distributed system 200 including an application server system 202 configured to process application crash report data 222 for use by a third party software development kit (SDK) development system 232 in accordance with one or more aspects of the present disclosure. System 200 is an example of system 100, in which the various components illustrated in FIG. 2 provide similar functionality as like-numbered components illustrated in FIG.

[0035] For example, system 200 includes one or more application server systems 202 communicatively coupled to one or more application development systems 228, one or more SDK development systems 232, and one or more client computing devices 240 via one or more networks 226. Application server system 202 is an example of application server system 102 shown in FIG. 1 ; network 226 is an example of network 126; application development system 228 is an example of application development system 128; SDK development system 232 is an example of third party library development system 132; and client computing device 240 is an example of client computing device 140.

[0036] FIG. 2 illustrates an example where a third-party library includes an SDK 238 developed by a third-party SDK developer using an SDK development system 232. In various examples, an SDK includes a collection of software development tools or components provided in an installable library. As shown in FIG. 2, the SDK development system 232 includes one or more SDKs 238 that may be developed by one or more third-party SDK developers using the SDK development system 232. A variety of different applications, such as an application 204 developed using the application development system 228, may include one or more of the SDKs 238. Similar to the third-party library development system 132 of FIG. 1, the SDK development system 232 of FIG. 2 includes an SDK 238, SDK data 236, SDK crash report data 224, one or more SDK console interfaces 234, and one or more display devices 230. The SDK crash report data 224 is an example of library error data 124, and one or more of the errors associated with the execution of the application 204 include one or more application crashes. In some cases, the SDK data 236 provided by the SDK development system 232 to the application server system 202 may include de-obfuscated data associated with library-dependent source code of the SDK 238, as described above. The application server system 202 may store such data locally in the de-obfuscated data 209. The de-obfuscation module 212 of the SDK crash report generator 210 may use such de-obfuscated data 209 to de-obfuscate one or more portions of the application crash report data 222 (e.g., library-dependent source code) in order for the SDK crash report generator 210 to generate the SDK crash report data 224.

[0037] 2 includes an application 204 and corresponding application data 206, including mapping data 208. One or more application developers may create the application 204 using the application development system 228. In some cases, the application data 206 provided by the application development system 228 to the application server system 202 may also include de-obfuscated data associated with application-dependent source code of the application 204. The application server system 202 may store such data locally in de-obfuscated data 209.

[0038] 1, the client computing device 240 of FIG. 2 includes applications 204. One or more of the applications 204 may crash or otherwise terminate execution, and the application crash report data 222 may include data associated with these crashes. The application crash report data 222 is an example of the application error data 122 shown in FIG. 1. The one or more application crash reporting modules 242 are configured to transmit the application crash report data 222 to the application server system 202.

[0039] The application server system 202 includes an application 204 and corresponding application data 206. The application data 206 includes mapping data 208 and optional deobfuscation data 209. The application server system 202 also includes an SDK crash report generator 210, an application error handling module 220, an SDK crash reporting module 221, application crash report data 222, and SDK crash report data 224 (which are examples of the library error data generator 110, the application error handling module 120, the library error reporting module 121, the application error data 122, and the library error data 124, respectively).

[0040] Similar to the library error data generator 110, the SDK crash report generator 210 includes an SDK attribution module 214, a scrubbing module 216, a clustering module 218, and an optional de-obfuscation module 212. The SDK crash report generator 210 is configured to generate SDK crash report data 224 based on application crash report data 222 sent by an application crash reporting module 242 and processed by an application error processing module 220 of the application server system 202. The application crash report data 222 may include stack trace data 223 provided by the application crash reporting module 242, and the SDK crash report data 224 generated by the SDK crash report generator 210 may also include stack trace data 225. The stack trace data 225 may include one or more portions of the stack trace data 223, as described above with reference to the library error data 124 and the application error data 122 of FIG. 1. The SDK crash reporting module 221 of the application server system 202 may send the SDK crash report data 224 to the SDK development system 232 , which may then display one or more portions of this display on the display device 230 .

[0041] 3 is a block diagram illustrating an example application server system 302 in accordance with one or more aspects of the present disclosure. Application server system 302 may be an example of application server system 102 (FIG. 1) and / or application server system 202 (FIG. 2). FIG. 3 illustrates only one particular example of application server system 302, and many other examples of application server system 302 may be used in other examples. In various cases, application server system 302 may include a subset of the components shown in FIG. 3 or may include additional components not shown in FIG. 3.

[0042] 3, application server system 302 includes a display device 348, one or more processors 344, one or more input components 346, one or more communication units 350, one or more output components 354, and one or more storage devices 358. A communication channel 347 may interconnect (physically, communicatively, and / or operatively) each of components 344, 346, 348, 350, 354, and / or 358 for inter-component communication. In some examples, communication channel 347 may include a system bus, a network connection, an inter-process communication data structure, or any other method for communicating data between hardware and / or software.

[0043] One or more input components 346 of the application server system 302 may receive input, such as input from a user. Examples of input are touch / haptic, presence sensing, and voice input. Examples of input components 346 include a presence sensing screen, a touch-sensitive screen, a touch screen, a mouse, a keyboard, a trackpad, a voice response system, a video camera, a microphone, or any other type of device for detecting input from a human or a machine.

[0044] One or more output components 354 of the application server system 302 may generate output. Examples of output are haptic output, audio output, and visual output. Examples of output components 354 include a presence sensing screen, a touch sensitive screen, a touch screen, a sound card, a video graphics adapter card, a speaker, a liquid crystal display (LCD), an organic light emitting diode (OLED) display, a micro light emitting diode (micro LED) display, an active matrix organic light emitting diode (AMOLED) display, a haptic device, or any other type of device for generating output to a human or machine.

[0045] One or more communication units 350 of the application server system 302 may communicate with external devices over one or more networks by transmitting and / or receiving network signals over one or more networks (e.g., one or more wired and / or wireless networks). For example, the application server system 302 may use the communication unit 350 to transmit and / or receive radio signals over a wireless network, such as a cellular wireless network. Similarly, the communication unit 350 may transmit and / or receive satellite signals over a satellite network, such as a Global Positioning System (GPS) network. Examples of the communication unit 350 include a network interface card (e.g., an Ethernet card, etc.), an optical transceiver, a radio frequency transceiver, a GPS receiver, or any other type of device capable of transmitting and / or receiving information. Other examples of the communication unit 350 may include a shortwave radio, a cellular data radio, a wireless Ethernet network radio, and a universal serial bus (USB) controller.

[0046] In some cases, the application server system 302 may include a display device 348. In some examples, the display device 348 may provide output to the user using tactile, audio, or visual stimuli, as described above with reference to the output component 354. For example, the display device 348 may provide a display or video output, as described above with reference to the output component 354. The display device 348 may also provide input functionality, as described above with reference to the input component 346. In some cases, the application server system 302 may not include a display device 348.

[0047] One or more storage devices 358 may store information for processing during operation of the application server system 302. In some examples, the storage devices 358 include temporary memory, meaning that the primary purpose of the storage devices 358 is not long-term storage. The storage devices 358 on the application server system 302 may be configured for short-term storage of information as volatile memory, and thus do not retain stored contents when power is turned off. Examples of volatile memory include random access memory (RAM), dynamic random access memory (DRAM), static random access memory (SRAM), and other forms of volatile memory known in the art.

[0048] The storage device 358 includes one or more computer readable storage media in some examples. The storage device 358 may be configured to store a larger amount of information than a volatile memory. The storage device 358 may further be configured as a non-volatile memory space for long-term storage of information and may retain information after a power on / off cycle. Examples of non-volatile memory include magnetic hard disks, optical disks, floppy disks, flash memory, or forms of electrically programmable memory (EPROM) or electrically erasable programmable (EEPROM) memory. The storage device 358 may store program instructions and / or data associated with one or more of the application 304, application data 306, mapping data 308, library error data generator 310, application error processing module 320, library error reporting module 321, application error data 322, and library error data 324, which may include examples of similarly numbered components or modules shown in FIGS. 1-2. The library error data generator 310 includes a deobfuscation module 312 , a library attribution module 314 , a scrubbing module 316 , and a clustering module 318 .

[0049] One or more processors 344 may implement functions and / or execute instructions within application server system 302. For example, processor 344 on application server system 302 may receive and execute instructions stored by storage device 358 that perform functions of application 304, library error data generator 310 (including deobfuscation module 312, library attribution module 314, scrubbing module 316, and clustering module 318), application error handling module 320, and / or library error reporting module 321. These instructions executed by processor 344 may cause application server system 302 to store information in storage device 358 during program execution.

[0050] 4 is a conceptual diagram illustrating example stack trace data 423 including both library-dependent source code and application-dependent source code in accordance with one or more aspects of the present disclosure. The stack trace data 423 is an example of the stack trace data 223 shown in FIG. 2 that may be included in the application crash report data 222 provided by the client computing device 240 to the application server system 202. The stack trace data 423 is associated with at least one error that occurred during execution of one of the applications 204 shown in FIG. 2, for example. For illustrative purposes only, the relevant examples shown in FIGS. 4-8 are described with reference to the system 200 shown in FIG. 2.

[0051] 4, stack trace data 423 includes an error identifier (e.g., an exception identifier) ​​460 that identifies one or more errors associated with stack trace data 423. Stack trace data 423 also includes multiple code portions: library-dependent source code 461, application-dependent source code 462, and library-dependent source code 463. Stack trace data 423 can represent nested function calls having a calling order 464, which may be, for example, from a program loader to a location where a crash occurred during execution of one or more of the respective applications (e.g., application 204 shown in FIG. 2). The calling order 464 of the function calls that may have led to a possible crash is from bottom to top in the example of FIG. 4 (e.g., library-dependent source code 463, application-dependent source code 462, library-dependent source code 461).

[0052] In various examples, each line of stack trace data 423 shown in FIG. 4 may be referred to as a frame or code location of the stack trace. In some cases, each frame or code location of the stack trace may indicate information associated with the source code (e.g., library-dependent or application-dependent source code) of that frame of the stack trace. For example, this information may include a library name or identifier. In some examples, the name or identifier may include a package name, a namespace name, a module name, etc. In some examples, the information about each frame or code location may include additional information, such as one or more of a class name, a method name, and / or a function name, separately or in any combination. In some cases, each frame or code location of the stack trace may further indicate the file name of the file in which the source code is included and / or the line number of the source code for that frame.

[0053] Application-dependent source code 462 is associated with code that is specific to one of applications 204, for example. Library-dependent source code 461 is associated with code from, for example, a first SDK (named "examplehttp") of SDKs 238 shown in Figure 2. Library-dependent source code 463 is associated with code from, for example, a second SDK (named "OS.app") of SDK 238, where "OS" may represent the name of the operating system in this particular example.

[0054] 5 is a conceptual diagram illustrating example mapping data 508 providing a mapping between one or more portions of an application's library-dependent source code and at least one third-party library into which the library-dependent source code is loaded during execution of the application, in accordance with one or more aspects of the present disclosure. The mapping data 508 may be one example of the mapping data 208 shown in FIG. 2 included in the application data 206 provided by the application development system 228 to the application server system 202. Use of such mapping data may, in various cases, enable the SDK crash report generator 210 to determine whether stack trace data, such as stack trace data 423, traverses any library code of an application within the application 204 such that the SDK attribution module 214 may attribute a crash to a library corresponding to such code.

[0055] In some cases, an application developer and / or application development system 228 may develop or create mapping data 508 associated with each of the developed applications 204 deployed on the application server system 202 shown in Figure 2. The application development system 228 may provide such mapping data 508 (which is one example of the mapping data 208 shown in Figure 2) to the application server system 202 for use by the SDK crash report generator 210. In some cases, the application server system 202 may obtain one or more portions of the mapping data 508 from one or more external sources or repositories (e.g., publicly accessible repositories that provide such information about applications 204).

[0056] As shown in Figure 5, the mapping data 508 provides a mapping between one or more portions of library-dependent source code of one of the applications 204 and at least one third party library (e.g., an SDK) into which the library-dependent source code is loaded during execution of the application. In Figure 5, an example mapping between identified portions or patterns of library-dependent source code and a first SDK ("examplehttp") is shown.

[0057] For example, mapping data 508 maps a first portion or pattern 570 of an application's library-dependent source code to an SDK identifier 571 of this first SDK. As shown in FIG. 5 , pattern 570 identifies library-dependent source code with a package name "okttp3" and a class name "ExampleHttpClient." The "*" wildcard character in pattern 570 indicates that any function / method in the library-dependent source code with this package and class name is mapped to SDK identifier 571. Mapping data 508 maps pattern 570 of library-dependent source code to a first SDK having SDK identifier 571. SDK identifier 571 identifies this first SDK ("examplehttp"), and SDK identifier 571 may also identify the SDK name and version number ("4.8.1").

[0058] Mapping data 508 also maps a second portion or pattern 572 of the library-dependent source code to SDK identifier 571 of the first SDK. Pattern 572 identifies library-dependent source code having package name “examplehttp” and class name “ExampleHttpClient$Builder.” The “*” wildcard character in pattern 572 indicates that any function / method in the library-dependent source code with this package and class name is mapped to SDK identifier 571.

[0059] Mapping data 508 also maps a third portion or pattern 573 of the library-dependent source code to SDK identifier 571 of the first SDK. Pattern 573 identifies library-dependent source code associated with platform code with a package name "examplehttp" and a class name "OSPlatform." The "*" wildcard character in pattern 573 indicates that any function / method in the library-dependent source code with this package and class name is mapped to SDK identifier 571.

[0060] Mapping data 508 also maps a fourth portion or pattern 574 of the library-dependent source code to SDK identifier 571 of the first SDK. Pattern 574 identifies library-dependent source code that has a package name "examplehttp" and is associated with platform code that has a class name "Platform". The "*" wildcard character in pattern 574 indicates that any function / method in the library-dependent source code with this package and class name is mapped to SDK identifier 571. Thus, in the example of FIG. 5, library-dependent source code portions or patterns 570, 571, 572, 573 are all mapped to the same first SDK ("examplehttp").

[0061] Figure 6 is a conceptual diagram illustrating example stack trace data 625 included in an SDK crash report provided to one or more SDK development systems 232 in accordance with one or more aspects of the present disclosure. In various examples, the SDK crash report generator 210 (e.g., using the SDK attribution module 214) may generate SDK crash report data 224 that includes the stack trace data 625 shown in Figure 6. The SDK crash reporting module 221 may then transmit this SDK crash report data 224 to the SDK development system 232 for output to the display device 230.

[0062] In various examples, as discussed above, SDK attribution module 214 may attribute the crash to one or more SDKs included in SDKs 238. These SDKs may include library-dependent source code that is the cause of the crash. SDK attribution module 214 may determine a match between the library-dependent source code of the application and at least a portion of stack trace data 423 based on stack trace data 423 (FIG. 4) and mapping data (including mapping data 508 shown in FIG. 5). For example, based on mapping data 508 and stack trace data 423, SDK attribution module 214 may identify a first SDK ("examplehttp") as a possible cause of the crash. In addition, based on stack trace data 423 and additional mapping data related to a second SDK ("OS.app") not shown in FIG. 5, SDK attribution module 214 may identify the second SDK as another possible cause of the crash. Thus, the SDK attribution module 214 identifies these first and second SDKs as SDK candidates 678 that may have caused the crash. In some examples, one or more of such SDK candidates may be involved in any given crash. Because the first SDK is located at the top of the stack trace data 423 shown in FIG. 4, the SDK attribution module 214 may, in some cases, rank the first SDK as the first, or potentially stronger, candidate for being involved in the crash in relation to the second SDK.

[0063] To identify these SDK candidates 678, in various examples, the SDK attribution module 214 may analyze the mapping data and attempt to match portions or patterns in such data (e.g., patterns 570, 572, 573, 574 in the mapping data 508) with source code contained in frames or code locations of the stack trace data 423 received from the client computing device 240. Upon finding one or more matches, the SDK attribution module 214 may then identify the third party library corresponding to the library identifier in the mapping data (e.g., the first SDK “examplehttp” associated with SDK identifier 571 in the mapping data 508) as a library that may be a potential cause of the crash.

[0064] In one or more specific, non-limiting examples, the SDK attribution module 214 may perform such a process to identify SDK candidates 678 based on the following pseudocode: set <library>matched_libraries = {}; for (string code_location in input_stack_trace.code_locations) { for (string library_pattern in mapping.library_patterns) { if (library_pattern.matches(code_location)) { matched_libraries.add(library_pattern.library); } } } In this pseudocode, input_stack_trace may correspond to stack trace data 423, and input_stack_trace.code_locations corresponds to each frame or code location of stack trace data 423. The mapping.library_patterns in the pseudocode may correspond to patterns 570, 572, 573, 575 of mapping data 508. As described above, SDK attribution module 214 may analyze the mapping data and attempt to match portions or patterns in such data (e.g., patterns 570, 572, 573, 574 in mapping data 508) with source code contained in frames or code locations of stack trace data 423 received from client computing device 240. Upon finding such a match, SDK attribution module 214 may add each identified library (e.g., library identifier) ​​to a set of matched_libraries (e.g., SDK candidates 678).

[0065] After performing the matching operation, the SDK crash report generator 210 may generate stack trace data 625, shown in FIG. 6, associated with the first SDK ("examplehttp") and the second SDK ("OS.app") and included in the SDK crash report data 224. The stack trace data 625 may include one or more portions of the stack trace data 423. The SDK crash reporting module 221 may send this SDK crash report data 224, including the stack trace data 625, to the SDK development system 232.

[0066] 6, stack trace data 625 includes error identifier 660, library-dependent source code 661 associated with a first SDK ("examplehttp") and library-dependent source code 663 associated with a second SDK ("OS.app") of SDK 238. Error identifier 660 corresponds to error identifier 460, library-dependent source code 661 corresponds to library-dependent source code 461, and library-dependent source code 663 corresponds to library-dependent source code 463 in stack trace data 423 of FIG.

[0067] 6, however, the stack trace data 625 does not include application-dependent source code 462. Instead, the stack trace data 625 includes a generic or uniform placeholder 676. Although FIG. 6 shows one or more "-" or "_" characters as the placeholder 676, in other examples, any other form of symbol or alphanumeric character (e.g., " <private>" ) may be used. As discussed above, in various cases, scrubbing module 216 may be configured to remove certain information from stack trace data 423 when generating library error data, such as stack trace data 625 shown in FIG. 6.

[0068] For example, after identifying SDK candidates 678, scrubbing module 216 may wipe sensitive or specific information associated with the identity or internal details of the crashed application. Thus, in various cases, scrubbing module 216 may be configured to remove all application-dependent information (e.g., application-dependent source code 462) from stack trace data 423 when generating stack trace data 625 and replace this information with placeholders 676. As a result, SDK development system 232 does not receive any such application-dependent information in SDK crash report data 224 for use or display by SDK console interface 234.

[0069] The SDK crash report generator 210 (e.g., using the SDK attribution module 214 and / or the clustering module 218) may be configured to generate a unique fingerprint identifier (ID) 677, such as a unique hash identifier, associated with the contents of the stack trace data 625, as the case may be. The fingerprint ID 677 may be used to aggregate and / or cluster the stack trace data 625 with other similar stack trace data that may be associated with other application crashes, as described in more detail below. The SDK crash reporting module 221 may send this SDK crash report data 224, including the stack trace data 625, to an SDK development system 232 associated with a first SDK ("examplehttp") and a second SDK ("OS.app") included in the SDK 238. An SDK developer of these first and / or second SDKs may then review the SDK crash report data 224 using an SDK console interface 234.

[0070] However, in other cases, the scrubbing module 216 may be further configured to remove information associated with other SDKs from the stack trace data 625. Thus, in the example of FIG. 6 where the SDK attribution module 214 identified the first and second SDKs as SDK candidates 678, the scrubbing module 216 may generate two separate instances of stack trace data associated with the first and second SDKs. The first stack trace data may include only the library-dependent source code associated with the first SDK, and the second stack trace data may include only the library-dependent source code associated with the second SDK. Both the first and second stack trace data may be stored in the SDK crash report data 224. The SDK crash reporting module 221 may send the portion of the SDK crash report data 224 including the first stack trace data to one or more of the SDK development systems 232 developing the first SDK of the SDKs 238, and the SDK crash reporting module 221 may send the portion of the SDK crash report data 224 including the second stack trace data to one or more of the SDK development systems 232 developing the second SDK. The SDK developers of each of these first and second SDKs may then review the respective first and second stack trace data associated with the application crash. FIGS. 7-8 provide examples of such first and second stack trace data. By utilizing this technique, the scrubbing module 216 is configured to remove SDK information related to the second SDK when providing the first stack trace data to the developer of the first SDK, and to remove SDK information related to the first SDK when providing the second stack trace data to the developer of the second SDK.

[0071] 7 is a conceptual diagram illustrating another example of stack trace data 725 included in an SDK crash report (e.g., SDK crash report data 224) provided to one or more SDK development systems 232 in accordance with one or more aspects of the present disclosure. If the stack trace data 423 of FIG. 4 includes library-dependent source code for multiple different third party libraries among the third party libraries 238 developed by the third party library development system 232 (FIG. 2), the scrubbing module 216 may be configured to remove one or more portions of such library-dependent source code when generating the stack trace data 725, such as any library-dependent source code that is not associated with an identified third party library that the library attribution module 214 attributes to the current error.

[0072] Thus, in the example of FIG. 7, the scrubbing module 216 removes all frames of the stack trace data 423 provided by the client computing device 240 that include application-dependent source code 462 and any library-dependent source code that is not associated with the first identified SDK (library) candidate "examplehttp". Thus, when generating or updating the stack trace data 725, the scrubbing module 216 removes the library-dependent source code 463 associated with the second identified SDK (library) candidate "OS.app". As shown in FIG. 7, the stack trace data 725 includes an error identifier 760 and library-dependent source code 761 associated with the first SDK candidate "examplehttp". The clustering module 218 may also generate a unique fingerprint identifier 777 for the stack trace data 725 that may be used to cluster the stack trace data 725 with other similar stack trace data associated with other application crashes, as described in more detail below.

[0073] 8 is a conceptual diagram illustrating another example of stack trace data 825 included in an SDK crash report (e.g., SDK crash report data 224) provided to one or more SDK development systems 232 in accordance with one or more aspects of the present disclosure. If the stack trace data 423 of FIG. 4 includes library-dependent source code for multiple different ones of the third party libraries 238 developed by the third party library development system 232 (FIG. 2), the scrubbing module 216 may be configured to remove one or more portions of such library-dependent source code when generating the stack trace data 825, such as any library-dependent source code that is not associated with an identified third party library that the library attribution module 214 attributes to the current error.

[0074] Thus, in the example of FIG. 8, the scrubbing module 216 removes all frames of the stack trace data 423 provided by the client computing device 240 that include application-dependent source code 462 and any library-dependent source code that is not associated with the second identified SDK (library) candidate "OS.app". Thus, when generating or updating the stack trace data 825, the scrubbing module 216 removes the library-dependent source code 463 associated with the first identified SDK (library) candidate "examplehttp". As shown in FIG. 8, the stack trace data 825 includes an error identifier 860 and library-dependent source code 863 associated with the second SDK candidate "OS.app". The clustering module 218 may also generate a unique fingerprint identifier 877 for the stack trace data 825, which may be used to cluster the stack trace data 825 with other similar stack trace data associated with other application crashes.

[0075] As a result, the scrubbing module 216 may generate two separate instances of stack trace data associated with these first and second SDKs. The first stack trace data may include only the library-dependent source code associated with the first SDK, and the second stack trace data may include only the library-dependent source code associated with the second SDK. In one or more specific, non-limiting examples, the scrubbing module 216 may execute a process for generating such stack trace data for the different candidate SDKs for inclusion in the SDK crash report data 224 sent to the SDK development system 232, similar to or based on the following pseudocode: list<stack_trace> library_stack_traces = []; for (library in matched_libraries) { library_stack_trace = library_stack_traces.add_new(); last_matched = false; for (code_location in input_stack_trace.code_locations) { if (library.matches(code_location) { last_matched = true; library_stack_trace.append(code_location) } else if (last_matched) { last_matched = false; library_stack_trace.append('_') } } } In this pseudocode, matched_libraries are those SDK candidates 678, namely, the first SDK ("examplehttp") and the second SDK ("OS.app"). This pseudocode creates separate first and second instances of stack trace data for the first and second SDKs in the list of library_stack_trace. For example, the scrubbing module 216 creates a first library stack trace data 725 (library_stack_trace) and adds it to the list of library_stack_trace, which includes the library-dependent source code 761 for the first SDK in the stack trace data 725 generated from the input stack trace data 423 (input_stack_trace). The scrubbing module 216 traverses each frame or code_location of the stack trace data 423 to identify the library-dependent source code 461 of the first SDK. Upon identifying such code, scrubbing module 216 adds or appends this code to the first library stack trace data 725 in the list (library_stack_trace) as library-dependent source code 761. For any other library-dependent source code (e.g., library-dependent source code 463) or any application-dependent source code (e.g., application-dependent source code 462), scrubbing module 216 either completely removes this code in stack trace data 725 as shown in FIG. 7 or replaces such code with one or more uniform placeholders (e.g., “_” characters) (not shown in FIG. 7).

[0076] Similarly, the scrubbing module 216 creates a second library stack trace data 825 (library_stack_trace) and adds it to a list of library_stack_trace that includes library-dependent source code 863 for the second SDK in the stack trace data 825 generated from the input stack trace data 423 (input_stack_trace). The scrubbing module 216 traverses each frame or code_location of the stack trace data 423 to identify library-dependent source code 463 of the first SDK. Upon identifying such code, the scrubbing module 216 adds or appends this code as library-dependent source code 863 to the first library stack trace data 825 (library_stack_trace) in the list. For any other library-dependent source code (e.g., library-dependent source code 461) or any application-dependent source code (e.g., application-dependent source code 462), scrubbing module 216 either completely removes this code in stack trace data 825 as shown in FIG. 8, or replaces such code with one or more uniform placeholders (e.g., “_” characters) (not shown in FIG. 8).

[0077] As described above, the clustering module 218 may also generate a unique fingerprint identifier 777 for the stack trace data 725, which may be used to cluster the stack trace data 725 with other similar stack trace data associated with other application crashes. The clustering module 218 may similarly generate a unique fingerprint identifier 877 for the stack trace data 825, which may be used to cluster the stack trace data 825 with other similar stack trace data associated with other application crashes. The clustering module 218 may store the fingerprint identifiers 777 and 877 (e.g., in the SDK crash report data 224 or in an associated data store) in various cases.

[0078] Each of the stack trace data 725 and 825 may be processed and clustered into groups of similar data or reports based on the identified fingerprint identifiers 777, 877, respectively. By performing one or more clustering operations using the clustering module 218, the SDK crash report generator 210 may be configured to process the application crash report data 222 associated with any number of different applications 204 developed by any number of different application developers on the application development system 228, and then aggregate and cluster similar errors and crashes that occurred during the execution of these applications 204. The SDK crash reporting module 221 may then output the clustered SDK crash report data 224 associated with the particular identified SDK 238 to the SDK development system 232, which may then be displayed on the display device 230 via the SDK console interface 234 for review by the respective SDK developers.

[0079] In various cases, to perform such aggregation or clustering, SDK crash report generator 210 and / or SDK crash reporting module 221 may index or group and store the current and historical stack trace data in stack trace data 225 of SDK crash report data 224 according to fingerprint identifiers respectively associated with such stack trace data. Thus, as an example, SDK crash report generator 210 may store stack trace data 725 in stack trace data 225. Clustering module 218 may also store in SDK crash report data 224 one or more other portions of application crash report data 222 received from application crash reporting module 242 that are associated with the particular crash that resulted in stack trace data 725. For example, if application crash report data 222 includes version number information of the operating system used by application 204, version numbers of any SDKs included in application 204, device type of client computing device 240, etc., clustering module 218 may store such information in SDK crash report data 224. In some cases, the clustering module 218 may also obtain SDK version information from the mapping data 208. All of such information in the SDK crash report data 224 and stack trace data 225 may be indexed or grouped according to the fingerprint identifier 777. In some cases, the clustering module 218 may also obtain SDK version information and / or SDK name information from the mapping data 208 and then store it in the SDK crash report data 224.

[0080] Similarly, SDK crash report generator 210 may store stack trace data 825 in stack trace data 225. Clustering module 218 may also store in SDK crash report data 224 one or more other portions of application crash report data 222 received from application crash reporting module 242 that are associated with the particular crash that resulted in the generation of both stack trace data 725 and stack trace 825 (e.g., the version number of the operating system used by application 204, the version numbers of any SDKs included in application 204, the device type of client computing device 240, etc.). This information in SDK crash report data 224 and stack trace data 225 may further be indexed or grouped according to fingerprint identifier 877. Additionally, as described in more detail below, the clustering module 218 may also include, within the SDK crash report data 224, one or more of the number of applications 204 affected by at least one error over a period of time (e.g., 30 days, 60 days, all cumulative time to date, etc.), the number of users affected by at least one error over that period of time, or the number of occurrences of at least one error over that period of time.

[0081] Over time, the SDK crash report generator 210 may process additional application crash report data 222 associated with additional errors or crashes encountered during execution of the application 204. These may include one or more of the applications 204 developed by one or more different application developers using the application development system 228. The SDK crash report generator 210 may generate additional stack trace data associated with these errors or crashes. The clustering module 218 may generate corresponding fingerprint identifiers for such stack trace data and compare these fingerprint identifiers to previously generated fingerprint identifiers associated with stack trace data and other data previously stored in the SDK crash report data 224. If there is a fingerprint identifier match, the clustering module 218 may perform one or more clustering operations to aggregate or cluster the current error or crash data with the previously collected data, and such clustering may indicate similarities between errors or crashes occurring over time in one or more applications 204 that utilize similar ones of the SDK 238. The SDK crash reporting module 221 may then output the SDK crash report data 224 to an SDK development system 232 so that individual SDK developers may view, via an SDK console interface 234, portions of the SDK crash report data 224 that correspond to one or more of the SDKs 238 that they developed and that may be the cause of one or more application errors.

[0082] The clustering module 218 may store various forms of clustering information in the SDK crash report data 234 based on the clustering operations performed. For example, the clustering module 218 may associate with the clustered data and include in the SDK crash report data 234 one or more of the following information: the number of occurrences of similar errors (e.g., reports, problems, crashes) over a period of time, the number of applications (and / or users of the applications) that experienced similar errors, the name of the library (e.g., SDK) associated with the error, the library version, the operating system and / or operating system version of the computing device on which the error occurred, and / or the type of client computing device on which the error occurred. Upon receiving such aggregated and / or clustered data in the SDK crash report data 224, the SDK development system 232 may output one or more portions of such data using the SDK console interface 234 to the display device 230, which may be reviewed by the respective SDK developer of the SDK in question. FIGS. 9-10 provide examples of such outputs.

[0083] As discussed above, in some cases, the clustering module 218 may perform one or more application anonymization functions with respect to applications and application developers of the application development system 228. For example, when including error information (e.g., clustering information) in the SDK crash report data 224 associated with one or more of the applications 104, the clustering module 218 may refrain from including any specific or identifying information regarding which of the applications 204 are associated with the SDK crash report data 224. Instead, the clustering module 218 may include only generic information about such applications 204, such as the number of applications in general. In some cases, the clustering module 218 may include further information, such as the type of application, information about the client computing device 140 (e.g., operating system or device type information), depending on the type and details of information included in the application crash report data 222 provided by the client computing device 240 (e.g., by the application error reporting module 242) to the application server system 202.

[0084] In some cases, the clustering module 218 may perform one or more application thresholding functions, e.g., as a further form of anonymization. For example, the clustering module 218 may only include error data affecting more than a threshold number of applications in the SDK crash report data 224 to potentially further preserve the anonymity of one or more applications 204 that experience errors. In some cases, only errors (e.g., crashes) observed across more than this threshold number of applications may be reported to the SDK development system 232. These errors may relate to common issues or bugs of particular interest to library developers of one or more SDKs 238 associated with the SDK crash report data 224. In some cases, this threshold may include a predetermined or default number of applications.

[0085] 9 is a screen diagram illustrating an example graphical user interface 980 that may be displayed in one or more third party library development systems based on data provided by an application server system in accordance with one or more aspects of the present disclosure. For illustrative purposes only, FIG. 9 is described with reference to the SDK development system 232 and application server system 202 shown in FIG.

[0086] As mentioned above, the SDK crash reporting module 221 may transmit the SDK crash report data 224 to the SDK development system 232. One or more SDK console interfaces 234 of the SDK development system 232 may output one or more portions of such SDK crash report data 224 (e.g., in one or more graphical user interfaces) for display on one or more display devices 230. As a result, one or more SDK library developers may review the information output by the SDK console interfaces 234 to determine any issues with each of the SDKs 238 that they have developed or maintained. The graphical user interface 980 shown in FIG. 9 is one example of such a graphical user interface.

[0087] The graphical user interface 980 includes various information provided by the clustering module 218. Also, as described above, the clustering module 118 may generate the clustered library error data 124, as well as the clustered SDK crash report data 224. For example, when generating such clustered SDK crash report data 224 for one or more errors (e.g., crashes) occurring during the execution of one or more of the applications 204, the clustering module 118 may include various forms of clustered information along with the SDK crash report data 224. For example, the clustering module 118 may include information such as the type of application 204, one or more version numbers of at least one of the corresponding SDKs 238, at least one version number of at least one operating system executed by the client computing device 240, information about the client computing device 240 (e.g., operating system or device type information), depending on the type and details of information included in the application crash report data 222 provided by the client computing device 240 to the application server system 202. Additionally, the clustering module 218 may also include in the SDK crash report data 224 one or more of the number of applications 204 affected by at least one error over a period of time (e.g., 30 days, 60 days, all cumulative time to date, etc.), the number of users affected by at least one error over that period of time, and / or the number of occurrences of at least one error over that period of time.

[0088] The graphical user interface 980 shown in FIG. 9 includes various examples of such information. The upper portion of the graphical user interface 980 includes graphs 981, 982, 983 associated with the occurrence of a particular error or crash over the last 30 days. In some cases, the SDK console interface 234 may output these graphs based on input received from one or more SDK developers provided in the SDK development system 232. For example, an SDK developer may provide user input to the SDK console interface 234 to request information in the graphical user interface for the last 30 days. In other examples, an SDK developer may request information for other time periods (e.g., 60 days, cumulative total time).

[0089] Graph 981 shows a graphical representation of the number of reports (e.g., occurrences) of identified crashes plotted over time. For graph 981, the x-axis shows time in days and the left y-axis shows the number of reports. Graph 982 shows a graphical representation of the number of users affected by a crash over time. For graph 982, the x-axis shows time in days and the left y-axis shows the number of affected users. Graph 983 shows a graphical representation of the number of affected applications over time for a crash. For graph 983, the x-axis shows time in days and the right y-axis shows the number of affected applications (e.g., the number of applications 204 affected).

[0090] As shown in FIG. 9 , the graphical user interface also includes further crash details 984, which may include one or more pending cases. In the example of FIG. 9 , the crash details 984 may include information for one or more different time points or days. For example, for a particular crash that occurred a particular number of times over the last 30 days (represented by graph 981) affecting a particular number of users (represented by graph 982) and / or applications (represented by graph 983), each line of the crash details 984 may include detailed information for one time point (e.g., one day) represented by graphs 981, 982, 983. For example, as shown in FIG. 9 , the crash details 984 may identify or indicate, for each respective row corresponding to a particular day, the name or identifier of the SDK associated with the crash, the first affected version number of the SDK, the number of affected users (for a point on graph 982), the number of affected applications (for a point on graph 983), and the reported number of occurrences of the crash (for a point on graph 981).

[0091] 10 is a screen diagram illustrating another example graphical user interface 1090 that may be displayed in one or more third party library development systems based on data provided by an application server system in accordance with one or more aspects of the present disclosure. For purposes of illustration only, FIG. 10 is described with reference to the SDK development system 232 and application server system 202 shown in FIG.

[0092] Graphical user interface 1090 is another example of an interface that may be output by SDK console interface 234 for display on display device 230 of SDK development system 232. SDK console interface 234 may output graphical user interface 1090 for display upon receipt of SDK crash report data 224, which may include clustered data generated by clustering module 218, as described above.

[0093] An upper portion of the graphical user interface 1090 includes graphs 1091, 1092, 1093 associated with occurrences of a particular error or crash over the last 30 days. Different occurrences of this particular crash during one or more executions of the application 204 over time may be associated with one or more version numbers of a particular SDK included in or used by the application 204, one or more version numbers of an operating system (OS) executed by the client computing device 240 while the application 204 is executing, and / or one or more device types of the client computing device 240 (e.g., device type based on manufacturer and / or model, device type based on physical characteristics of the client computing device 240, etc.).

[0094] Graph 1091 is a bar graph displaying the percentage of these occurrences of a particular crash or crash type clustered by SDK version, with each bar representing a different SDK version number. An SDK developer for this particular SDK may review graph 1091 to identify a breakdown of different versions of the SDK associated with different occurrences of the same or similar crashes over the last 30 days. Graph 1092 is a bar graph displaying the percentage of occurrences of a particular crash or crash type clustered by OS version, with each bar representing a different OS version number. An SDK developer may review graph 1092 to identify a breakdown of different versions of the OS executed by client computing device 240 associated with different occurrences of the same or similar crashes over the last 30 days.

[0095] Graph 1093 is a bar graph, with each bar representing a different device type, displaying the percentage of occurrences of a particular crash or type of crash clustered by device type of client computing device 240. The SDK version may review graph 1093 to identify a breakdown of different device types of client computing devices 240 associated with different occurrences of the same or similar crashes over the last 30 days.

[0096] The graphical user interface 1090 also includes stack information 1094. The stack information 1094 may, in various cases, include a graphical representation of the stack trace data 225 included in the SDK crash report data 224. As shown in FIG. 10, the stack information 1094 may include an OS version and an SDK version identifier associated with the displayed stack trace. For example, the stack trace may be associated with a particular version number of an SDK included in or used by the crashed application and a particular version number of an OS executed by one or more of the client computing devices 240 during execution of the application. The stack information 1094 also includes a textual representation of one or more portions of the stack trace data 225. For example, the textual representation may be one of the error identifier 760 and library dependency source code 761 included in the stack trace data 725, as shown in FIG. 7. In this example, the particular SDK of the SDKs 238 that may be associated with the occurrence of the crash is the "examplehttp" SDK.

[0097] Figure 11 is a flow diagram illustrating an example operation of a process 1100 performed by an application server system, such as any of the application server systems shown in Figures 1-3, in accordance with one or more aspects of the present disclosure. For purposes of illustration only, the operation of Figure 11 will be described with reference to the application server system 102 shown in Figure 1.

[0098] 11, process 1100 includes application server system 102 receiving (1102) from client computing device 140 (e.g., using application error handling module 120) application error data 122 associated with at least one error that occurred during execution of at least one of applications 104 on client computing device 140. Process 1100 includes application server system 102 receiving (1104) mapping data 108 providing a mapping between (i) library-dependent source code of the at least one application and (ii) at least one third party library, where the library-dependent source code is loaded from the at least one third party library during execution of the at least one application. The at least one third party library may be included in third party libraries 138.

[0099] The process 1100 also includes the application server system 102 determining (1106) a match between the library-dependent source code and at least one portion of the application error data 122 based on the application error data 122 and the mapping data 108, and in response to determining the match, the application server system 102 attributing (1108) at least one error that occurred during execution of the at least one application to at least one third-party library (e.g., using the library attribution module 114 of the library error data generator 110). The process 1100 further includes the application server system 102 generating (1110) library error data 124 associated with the at least one third party library (e.g., using the library attribution module 114 and / or the clustering module 118 of the library error data generator 110), the library error data 124 including at least a portion of the application error data 122, and the process 1100 further includes the application server system 102 sending (1112) the library error data 124 to one or more third party library development systems 132 that develop the at least one third party library (e.g., using the library error reporting module 121).

[0100] In one or more examples, the described functions may be implemented in hardware, software, firmware, or any combination thereof. When implemented in software, the functions may be stored on or transmitted via a computer-readable medium as one or more instructions or codes and executed by a hardware-based processing unit. The computer-readable medium may include a computer-readable storage medium corresponding to a tangible medium, such as a data storage medium, or a communication medium including any medium that enables the transfer of a computer program from one place to another, for example according to a communication protocol. In this manner, the computer-readable medium may generally correspond to (1) a tangible computer-readable storage medium that is non-transitory, or (2) a communication medium such as a signal or carrier wave. The data storage medium may be any available medium that can be accessed by one or more computers or one or more processors to retrieve instructions, code and / or data structures for implementation of the techniques described in this disclosure. A computer program product may include a computer-readable medium.

[0101] By way of example and not limitation, such computer-readable storage media may include RAM, ROM, EEPROM, CD-ROM or other optical disk storage, magnetic disk storage or other magnetic storage devices, flash memory, or any other storage media that may be used to store desired program code in the form of instructions or data structures and that may be accessed by a computer. Also, any connection is properly termed a computer-readable medium. For example, if the instructions are transmitted from a website, server, or other remote source using coaxial cable, fiber optic cable, twisted pair, digital subscriber line (DSL), or wireless technologies such as infrared, radio, and microwave, the coaxial cable, fiber optic cable, twisted pair, DSL, or wireless technologies such as infrared, radio, microwave, etc. are included in the definition of media. However, it should be understood that computer-readable storage media and data storage media do not include connections, carrier waves, signals, or other transitory media, but rather cover non-transitory tangible storage media. As used herein, disk and disc include compact disc (CD), laser disc, optical disc, digital versatile disc (DVD), floppy disk and Blu-ray disc, where disks typically reproduce data magnetically and discs reproduce data optically with lasers. Combinations of the above should also be included within the scope of computer readable media.

[0102] The instructions may be executed by one or more processors, such as one or more digital signal processors (DSPs), general-purpose microprocessors, application specific integrated circuits (ASICs), field programmable logic arrays (FPGAs), or other equivalent integrated circuits or discrete logic circuitry. Thus, the term "processor" as used herein may refer to any of the foregoing structures, or any other structure suitable for implementing the techniques described herein. Furthermore, in some aspects, the functionality described herein may be provided in dedicated hardware and / or software modules. Also, the techniques may be implemented entirely in one or more circuits or logic elements.

[0103] The techniques of the present disclosure may be implemented in a wide variety of devices or apparatuses, including wireless handsets, integrated circuits (ICs), or sets of ICs (e.g., chipsets). Although the present disclosure describes various components, modules, or units to highlight functional aspects of devices configured to perform the disclosed techniques, the components, modules, or units do not necessarily need to be implemented by different hardware units. Rather, as described above, the various units may be combined in a hardware unit or provided by a collection of operating hardware units, including one or more processors as described above, in association with appropriate software and / or firmware.

[0104] It should be appreciated that depending on the embodiment, certain acts or events of any of the methods described herein may be performed in a different sequence, added, merged, or omitted entirely (e.g., not all of the acts or events described are required to implement a method). Furthermore, in certain embodiments, acts or events may be performed simultaneously rather than sequentially, for example, through multi-threaded processing, interrupt processing, or multiple processors.

[0105] In some examples, computer-readable storage media include non-transitory media. The term "non-transitory" indicates that the storage medium is not embodied in a carrier wave or propagated signal. In some examples, non-transitory storage media may store data that can change over time (e.g., in RAM or cache).

[0106] Various examples have been described. These and other examples are within the scope of the following claims.< / private> < / library>

Claims

1. 1. A method comprising: an application server system including one or more processors receiving, from one or more client computing devices, application error data associated with at least one error that occurred during execution of at least one application on the one or more client computing devices; the application server system receiving mapping data providing a mapping between (i) library-dependent source code of the at least one application and (ii) at least one third party library, the library-dependent source code being loaded from the at least one third party library during execution of the at least one application, the method further comprising: determining, by the application server system, a match between the library-dependent source code and at least a portion of the application error data based on the application error data and the mapping data; in response to determining the match, the application server system attributing the at least one error that occurred during execution of the at least one application to the at least one third party library; and generating library error data associated with the at least one third party library, the library error data including the at least one portion of the application error data, the method further comprising: The method includes the application server system sending the library error data to at least one third party library development system that develops the at least one third party library.

2. the application error data includes application crash report data associated with the at least one error that caused the at least one application to crash on the one or more client computing devices; the at least one portion of the application error data includes at least one portion of the application crash report data; The method of claim 1 , wherein the library error data comprises library crash report data that includes the at least one portion of the application crash report data.

3. the application crash report data includes stack trace data representing nested function calls of the at least one application; The method of claim 2 , wherein the at least one portion of the application crash report data includes at least one portion of the stack trace data.

4. 4. The method of claim 3, wherein determining the match includes the application server system matching one or more patterns of the library-dependent source code to one or more code locations in the at least one portion of the stack trace data based on the stack trace data and the mapping data.

5. receiving, by the application server system, de-obfuscation data associated with the library-dependent source code from the at least one third party library development system that develops the at least one third party library; and the application server system deobfuscating the at least one portion of the stack trace data based on the deobfuscation data. The method according to claim 3 or 4.

6. The method according to any one of claims 3 to 5, wherein generating the library error data includes the application server system removing application-dependent source code from the stack trace data to generate the library error data.

7. the at least one third party library includes at least a first third party library and a second third party library; the library-dependent source code includes first library-dependent source code associated with the first third party library and second library-dependent source code associated with the second third party library; the at least one portion of the application error data includes the first library dependent source code; 7. The method of claim 6, wherein generating the library error data further comprises the application server system removing the second library dependent source code from the stack trace data to generate the library error data.

8. 8. The method of claim 1, wherein the library error data further indicates one or more of: at least one version number of the at least one third party library, at least one version number of at least one operating system executed by the one or more client computing devices, at least one device type of the one or more client computing devices, a number of applications affected by the at least one error over a period of time, a number of users affected by the at least one error over the period of time, or a number of occurrences of the at least one error over the period of time.

9. The method further comprises: the application server system determining a first fingerprint identifier associated with the at least one portion of the application error data included in the library error data; and the application server system determining a match between the first fingerprint identifier and a second fingerprint identifier associated with previously generated library error data, the previously generated library error data being associated with the at least one third party library, the previously generated library error data including at least a portion of application error data associated with the at least one error that occurred during execution of the at least one application on the one or more client computing devices, the method further comprising: in response to determining the match between the first fingerprint identifier and the second fingerprint identifier, the application server system clusters the library error data with the previously generated library error data to generate clustered library error data associated with the at least one third party library, the clustered library error data indicating at least a number of applications affected by the at least one error; The method of any one of claims 1 to 8, wherein sending the library error data includes the application server system sending the clustered library error data to the at least one third party library development system.

10. The method further comprises: the application server system determining that a number of the applications affected by the at least one error exceeds a threshold number; 10. The method of claim 9, wherein transmitting the clustered library error data occurs in response to determining that a number of the applications affected by the at least one error exceeds the threshold number.

11. The method of any one of claims 1 to 10, wherein receiving the mapping data comprises the application server system receiving the mapping data from at least one application development system that develops the at least one application.

12. At least one processor; and at least one computer-readable storage device configured to store instructions executable by said at least one processor, said instructions being executable by said at least one processor to perform a method according to any one of claims 1 to 11.

13. A computer readable storage device storing instructions that, when executed, cause at least one processor to perform the method of any one of claims 1 to 11.

Citation Information

Patent Citations

  • Method for generating a triage dump and computing device

    JP2014530392A

  • Source code identifying program, source code identifying method, and source code identifying device

    JP2018128867A

  • Software Development and Distributed Platform

    JP2018522317A

  • Programmable controller, programmable controller system, and execute error information creation method

    WO2014136228A1