Home | History | Annotate | Download | only in ndk-stack

Lines Matching refs:parser

26 #include "ndk-stack-parser.h"
28 /* Enumerates states of the crash parser.
31 /* Parser expects the beginning of the crash dump. */
33 /* Parser expects the build fingerprint, or process and thread information. */
35 /* Parser expects the process and thread information. */
37 /* Parser expects the signal information, or the first crash frame. */
39 /* Parser expects a crash frame. */
43 /* Crash parser descriptor.
52 /* Current state of the parser. */
85 * parser - NdkCrashParser descriptor, created and initialized with a call to
92 static int ParseFrame(NdkCrashParser* parser, const char* frame);
138 NdkCrashParser* parser;
140 parser = (NdkCrashParser*)calloc(sizeof(*parser), 1);
141 if (parser == NULL)
144 parser->out_handle = out_handle;
145 parser->state = EXPECTS_CRASH_DUMP;
147 parser->sym_root = strdup(sym_root);
148 if (!parser->sym_root)
151 if (regcomp(&parser->re_pid_header, _pid_header, REG_EXTENDED | REG_NEWLINE) ||
152 regcomp(&parser->re_sig_header, _sig_header, REG_EXTENDED | REG_NEWLINE) ||
153 regcomp(&parser->re_frame_header, _frame_header, REG_EXTENDED | REG_NEWLINE))
156 return parser;
159 DestroyNdkCrashParser(parser);
164 DestroyNdkCrashParser(NdkCrashParser* parser)
166 if (parser != NULL) {
168 regfree(&parser->re_frame_header);
169 regfree(&parser->re_sig_header);
170 regfree(&parser->re_pid_header);
172 free(parser->sym_root);
173 /* Release parser itself */
174 free(parser);
179 ParseLine(NdkCrashParser* parser, const char* line)
191 if (parser->state != EXPECTS_CRASH_DUMP) {
193 fprintf(parser->out_handle, "Crash dump is completed\n\n");
197 fprintf(parser->out_handle, "********** Crash dump: **********\n");
198 parser->state = EXPECTS_BUILD_FINGREPRINT_OR_PID;
203 switch (parser->state) {
206 fprintf(parser->out_handle, "%s\n",
208 parser->state = EXPECTS_PID;
214 if (MatchRegex(line, &parser->re_pid_header, &match)) {
215 fprintf(parser->out_handle, "%s\n", line + match.rm_so);
216 parser->state = EXPECTS_SIGNAL_OR_FRAME;
223 if (MatchRegex(line, &parser->re_sig_header, &match)) {
224 fprintf(parser->out_handle, "%s\n", line + match.rm_so);
225 parser->state = EXPECTS_FRAME;
231 if (!MatchRegex(line, &parser->re_frame_header, &match))
245 parser->state = EXPECTS_FRAME;
246 return ParseFrame(parser, line + match.rm_so);
315 ParseFrame(NdkCrashParser* parser, const char* frame)
333 fprintf(parser->out_handle, "Stack frame %s", frame);
337 fprintf(parser->out_handle,
338 "Parser is unable to locate instruction pointer token.\n");
366 snprintf(sym_file, sizeof(sym_file), "%s/%s", parser->sym_root, module_name);
396 fprintf(parser->out_handle, "\n");
398 fprintf(parser->out_handle,
407 fprintf(parser->out_handle, ": Routine %s in %s/%s:%d\n",
411 fprintf(parser->out_handle, ": Routine %s in %s:%d\n",
418 fprintf(parser->out_handle,