From 647fa19656fcd6c1fefc0e9957cf23573dc30a56 Mon Sep 17 00:00:00 2001 From: Brian Demsky Date: Wed, 26 Feb 2020 13:19:26 -0800 Subject: [PATCH] Code to print graph to output so that dot can be used to generate pdf of graph. --- .../nasa/jpf/listener/ConflictTracker.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/main/gov/nasa/jpf/listener/ConflictTracker.java b/src/main/gov/nasa/jpf/listener/ConflictTracker.java index b05c9f3..12eb14f 100644 --- a/src/main/gov/nasa/jpf/listener/ConflictTracker.java +++ b/src/main/gov/nasa/jpf/listener/ConflictTracker.java @@ -300,6 +300,10 @@ public class ConflictTracker extends ListenerAdapter { (getApp().hashCode() << 1) ^ getValue().hashCode(); } + + public String toString() { + return "<"+getAttribute()+", "+getValue()+", "+getApp()+", "+ismanual+">"; + } } static class IndexObject { @@ -344,6 +348,30 @@ public class ConflictTracker extends ListenerAdapter { return nodes.get(id); } + public void printGraph() { + System.out.println("digraph testgraph {"); + for(Integer i : nodes.keySet()) { + Node n = nodes.get(i); + System.out.print("N"+i+"[label=\""); + + for(IndexObject io:n.lastUpdates.keySet()) { + for(Update u:n.lastUpdates.get(io)) { + System.out.print(u.toString().replace("\"", "\\\"")+", "); + } + } + System.out.println("\"];"); + for(Edge e:n.outEdges) { + System.out.print("N"+e.getSrc().getId()+"->N"+e.getDst().getId()+"[label=\""); + for(Update u:e.getUpdates()) { + System.out.print(u.toString().replace("\"", "\\\"")+", "); + } + System.out.println("\"];"); + } + } + + System.out.println("}"); + } + @Override public void stateAdvanced(Search search) { String theEnd = null; @@ -399,6 +427,9 @@ public class ConflictTracker extends ListenerAdapter { @Override public void searchFinished(Search search) { out.println("----------------------------------- search finished"); + + //Comment out the following line to print the explored graph + // printGraph(); } private String getValue(ThreadInfo ti, Instruction inst, byte type) { -- 2.34.1