[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r20130 - in monkey/branches/MonkeyBacktracking/monkey: . sr
From: |
gnunet |
Subject: |
[GNUnet-SVN] r20130 - in monkey/branches/MonkeyBacktracking/monkey: . src/monkey |
Date: |
Wed, 29 Feb 2012 00:02:19 +0100 |
Author: safey
Date: 2012-02-29 00:02:19 +0100 (Wed, 29 Feb 2012)
New Revision: 20130
Added:
monkey/branches/MonkeyBacktracking/monkey/monkey_build_script
Modified:
monkey/branches/MonkeyBacktracking/monkey/src/monkey/Makefile.am
monkey/branches/MonkeyBacktracking/monkey/src/monkey/action_api.c
monkey/branches/MonkeyBacktracking/monkey/src/monkey/edb_api.c
monkey/branches/MonkeyBacktracking/monkey/src/monkey/xml_writer.c
Log:
Monkey and Action API compile again.
Restoring producing XML report for Null Pointer Exception bugs.
New Action API with stack trace computed recursively.
Added: monkey/branches/MonkeyBacktracking/monkey/monkey_build_script
===================================================================
--- monkey/branches/MonkeyBacktracking/monkey/monkey_build_script
(rev 0)
+++ monkey/branches/MonkeyBacktracking/monkey/monkey_build_script
2012-02-28 23:02:19 UTC (rev 20130)
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+echo "################## UNINSTALLING MONKEY ##################"
+sudo make uninstall
+echo "################## CLEANING WORKING DIRECTORY ###########"
+sudo make clean
+sudo make distclean
+echo "################## BOOTSTRAPPING ########################"
+./bootstrap
+echo "################## CONFIGURING MONKEY ###################"
+CFLAGS="-g -O0" ./configure
+echo "################## BUILDING MONKEY ######################"
+make
+echo "################## INSTALLING MONKEY ####################"
+sudo make install
+
Modified: monkey/branches/MonkeyBacktracking/monkey/src/monkey/Makefile.am
===================================================================
--- monkey/branches/MonkeyBacktracking/monkey/src/monkey/Makefile.am
2012-02-28 19:27:19 UTC (rev 20129)
+++ monkey/branches/MonkeyBacktracking/monkey/src/monkey/Makefile.am
2012-02-28 23:02:19 UTC (rev 20130)
@@ -24,6 +24,7 @@
monkey_edb.h
libmonkeyedb_la_LIBADD = \
+ -lgnunetutil \
-lsqlite3 \
$(GN_LIBINTL) $(XLIB)
@@ -32,9 +33,11 @@
monkey_action.h
libmonkeyaction_la_LIBADD = \
+ -lgnunetutil \
$(GN_LIBINTL) $(XLIB)
libmonkeyxml_la_LIBADD = \
+ -lgnunetutil \
$(GN_LIBINTL) $(XLIB)
libmonkeyxml_la_SOURCES = \
Modified: monkey/branches/MonkeyBacktracking/monkey/src/monkey/action_api.c
===================================================================
--- monkey/branches/MonkeyBacktracking/monkey/src/monkey/action_api.c
2012-02-28 19:27:19 UTC (rev 20129)
+++ monkey/branches/MonkeyBacktracking/monkey/src/monkey/action_api.c
2012-02-28 23:02:19 UTC (rev 20130)
@@ -294,6 +294,8 @@
{
fileName = malloc (sizeof (struct FileName));
fileName->name = strdup (token);
+ fileName->next = NULL;
+ fileName->prev = NULL;
MONKEY_CONTAINER_DLL_insert (fileNameListHead, fileNameListTail,
fileName);
return 0; /* OK */
@@ -352,6 +354,7 @@
expression = malloc (sizeof (struct Expression));
expression->expressionSyntax = strdup (colValues[0]);
expression->lineNo = atoi (colValues[1]);
+ expression->expressionValue = NULL; expression->next = NULL;
expression->prev = NULL;
MONKEY_CONTAINER_DLL_insert (function->expressionListHead,
function->expressionListTail,
expression);
@@ -380,7 +383,7 @@
struct Expression *tmp = NULL;
int expressionLength = 0;
- tmp = expressionListHead;
+ tmp = function->expressionListHead;
while (NULL != tmp)
{
if ((tmp->lineNo == function->line)
@@ -495,20 +498,41 @@
return MONKEY_OK;
}
+static void printTrace() {
+ struct Function *functionPtr = trace->functionListHead;
+ struct Expression *expressionPtr;
+ printf("Program Stack Trace:\n");
+ while (NULL != functionPtr) {
+ printf("Function: %s, file: %s, line: %d\n", functionPtr->name,
functionPtr->file, functionPtr->line);
+
printf("--------------------------------------------------------------------------------------------------\n");
+ printf("Expressions:\n");
+ expressionPtr = functionPtr->expressionListHead;
+ while (NULL != expressionPtr) {
+ printf("%s = %s, line: %d\n",
expressionPtr->expressionSyntax, (NULL == expressionPtr->expressionValue) ? "No
Value" : expressionPtr->expressionValue , expressionPtr->lineNo);
+ expressionPtr = expressionPtr->next;
+ }
+
+ functionPtr = functionPtr->next;
+ }
+ printf("############################## End Stack Trace
######################################################\n\n");
+}
+
int
MONKEY_ACTION_inspect_expression_database (struct
MONKEY_ACTION_Context
*cntxt)
{
- struct MONKEY_EDB_Context *edbCntxt;
int ret = MONKEY_OK;
int endScope;
const char *signalMeaning = cntxt->gdb_stop_reason->signal_meaning;
struct Function *function = NULL;
+
+ /* Variables used across recursive calls */
static int stackDepth = 0;
+ static struct MONKEY_EDB_Context *edbCntxt;
- if (NULL != trace) {
+ if (NULL == trace) {
trace = malloc(sizeof(struct Trace));
trace->functionListHead = NULL;
trace->functionListTail = NULL;
@@ -564,6 +588,7 @@
function->line = cntxt->gdb_frames->line;
function->name = cntxt->gdb_frames->func;
function->file = cntxt->gdb_frames->file;
+ function->expressionListHead = NULL; function->expressionListTail = NULL;
function->next = NULL; function->prev = NULL;
MONKEY_CONTAINER_DLL_insert (trace->functionListHead,
trace->functionListTail,
function);
@@ -614,13 +639,14 @@
ret = analyzeCustomFault (cntxt);
}
+ printTrace();
+
/* Now, dive deeper into the stack trace */
cntxt->gdb_frames = cntxt->gdb_frames->next;
if (NULL == cntxt->gdb_frames) {
stackDepth = 0;
- flushTrace(trace);
+ mi_disconnect(cntxt->gdb_handle);
MONKEY_EDB_disconnect (edbCntxt);
- mi_disconnect (cntxt->gdb_handle);
} else {
/* Recursively inspect the database for deeper frames */
MONKEY_ACTION_inspect_expression_database(cntxt);
@@ -895,19 +921,31 @@
MONKEY_ACTION_format_report_xml (struct MONKEY_ACTION_Context
*cntxt) {
struct MONKEY_XML_Node *node;
+ struct MONKEY_XML_Node *traceNode;
+ struct Function *functionPtr = trace->functionListHead;
+ struct Expression *expressionPtr;
switch (cntxt->debug_mode) {
case DEBUG_MODE_GDB:
switch (cntxt->bug_detected) {
case BUG_NULL_POINTER:
- cntxt->xmlReportRootNode = createXmlCrashNode("npe",
cntxt->gdb_frames->func, cntxt->gdb_frames->line, cntxt->gdb_frames->file);
+ cntxt->xmlReportRootNode = createXmlCrashNode("npe",
functionPtr->name, functionPtr->line, functionPtr->file);
node =
MONKEY_XML_WRITER_add_child(cntxt->xmlReportRootNode,
createXmlSimpleNode("history"));
node = MONKEY_XML_WRITER_add_child(node,
createXmlEpochStep(0));
- node = MONKEY_XML_WRITER_add_child(node,
createXmlSimpleNode("trace"));
- node = MONKEY_XML_WRITER_add_child(node,
createXmlFunctionNode(cntxt->gdb_frames->func, cntxt->gdb_frames->line,
cntxt->gdb_frames->file, 0));
- node = MONKEY_XML_WRITER_add_child(node,
createXmlSimpleNode("expressions"));
- node = MONKEY_XML_WRITER_add_child(node,
createXmlExpressionNode(cntxt->gdb_null_variable, "NULL"));
+ traceNode = MONKEY_XML_WRITER_add_child(node,
createXmlSimpleNode("trace"));
+ while (NULL != functionPtr) {
+ node = MONKEY_XML_WRITER_add_child(traceNode,
createXmlFunctionNode(functionPtr->name, functionPtr->line, functionPtr->file,
functionPtr->depth));
+ node = MONKEY_XML_WRITER_add_child(node,
createXmlSimpleNode("expressions"));
+ expressionPtr = functionPtr->expressionListHead;
+ while (NULL != expressionPtr) {
+ MONKEY_XML_WRITER_add_child(node,
createXmlExpressionNode(expressionPtr->expressionSyntax,
+ (NULL ==
expressionPtr->expressionValue) ? "Not Evaluated" :
expressionPtr->expressionValue)); // node = "expressions" node
+ expressionPtr = expressionPtr->next;
+ }
+
+ functionPtr = functionPtr->next;
+ }
break;
case BUG_CUSTOM:
default:
Modified: monkey/branches/MonkeyBacktracking/monkey/src/monkey/edb_api.c
===================================================================
--- monkey/branches/MonkeyBacktracking/monkey/src/monkey/edb_api.c
2012-02-28 19:27:19 UTC (rev 20129)
+++ monkey/branches/MonkeyBacktracking/monkey/src/monkey/edb_api.c
2012-02-28 23:02:19 UTC (rev 20130)
@@ -192,6 +192,8 @@
}
err = sqlite3_exec (cntxt->db_handle, query, iter, iter_cls, &errMsg);
+ free (query);
+
if (err)
{
fprintf(stderr,
Modified: monkey/branches/MonkeyBacktracking/monkey/src/monkey/xml_writer.c
===================================================================
--- monkey/branches/MonkeyBacktracking/monkey/src/monkey/xml_writer.c
2012-02-28 19:27:19 UTC (rev 20129)
+++ monkey/branches/MonkeyBacktracking/monkey/src/monkey/xml_writer.c
2012-02-28 23:02:19 UTC (rev 20130)
@@ -6,6 +6,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
+#include <string.h>
#include "monkey_common.h"
#include "monkey_xml_writer.h"
@@ -27,6 +28,7 @@
struct XmlAttribute *attribute = malloc(sizeof(struct XmlAttribute));
attribute->name = attrName;
attribute->value = attrValue;
+ attribute->next = NULL; attribute->prev = NULL;
MONKEY_CONTAINER_DLL_insert_tail (node->attributeListHead,
node->attributeListTail,
attribute);
return MONKEY_OK;
@@ -67,6 +69,7 @@
struct MONKEY_XML_Node* MONKEY_XML_WRITER_add_child(struct MONKEY_XML_Node
*parent, struct MONKEY_XML_Node *child) {
+ child->next = NULL; child->prev = NULL;
MONKEY_CONTAINER_DLL_insert_tail (parent->childrenListHead,
parent->childrenListTail,
child);
return child;
@@ -91,7 +94,10 @@
else {
fprintf(file, "<%s ", root->name);
while (NULL != tmpAttribute) {
- fprintf(file, "%s=\"%s\" ", tmpAttribute->name,
tmpAttribute->value);
+ if (NULL != strchr(tmpAttribute->value, '"')) // if the
Attribute value has double quotes, it should be displayed between single quotes
instead of double quotes
+ fprintf(file, "%s='%s' ", tmpAttribute->name,
tmpAttribute->value);
+ else
+ fprintf(file, "%s=\"%s\" ", tmpAttribute->name,
tmpAttribute->value);
tmpAttribute = tmpAttribute->next;
}
fprintf(file, ">\n");
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r20130 - in monkey/branches/MonkeyBacktracking/monkey: . src/monkey,
gnunet <=