Summary: - number the disjuncts in the abstract state and in the specs: #0, #1, ... This makes it much easier to know which disjunct the rest of the debug output is talking about, eg in "Executing from disjunct #N" messages - label the currently-inferred precondition with `PRE=` instead of just putting it in square brackets - print value histories when the debug level is >= 3 - separate the memory printing into heap and attributes labelled more explicitly For example, before: ``` 2 disjuncts: { {visited= false; astate= { heap=({ v1 -> { * -> v3 }, v2 -> { * -> v5 } }, { v5 -> { CppDelete(was invalidated by `delete`) } }); stack={ &n=v1, &ptr=v2 };} [{ heap=({ v1 -> { * -> v3 }, v2 -> { * -> v5 }, v3 -> { }, v5 -> { } }, { v1 -> { MustBeValid (read by line 57, column 7) }, v2 -> { MustBeValid (read by line 58, column 12) }, v5 -> { MustBeValid (read by line 58, column 5) } }); stack={ &n=v1, &ptr=v2 };}]}, {visited= false; astate= { heap=({ v1 -> { * -> v3 }, v2 -> { * -> v7 } }, { v7 -> { CppDelete(was invalidated by `delete`) } }); stack={ &n=v1, &ptr=v2 };} [{ heap=({ v1 -> { * -> v3 }, v2 -> { * -> v7 }, v3 -> { }, v7 -> { } }, { v1 -> { MustBeValid (read by line 57, column 7) }, v2 -> { MustBeValid (read by line 60, column 12) }, v7 -> { MustBeValid (read by line 60, column 5) } }); stack={ &n=v1, &ptr=v2 };}]} } ``` after: ``` 2 disjuncts: #0: visited=false; { roots={ &n=v1, &ptr=v2 }; mem ={ v1 -> { * -> v3 }, v2 -> { * -> v4 } }; attrs={ v3 -> { =7 }, v4 -> { CppDelete(was invalidated by `delete`) } };} PRE=[{ roots={ &n=v1, &ptr=v2 }; mem ={ v1 -> { * -> v3 }, v2 -> { * -> v4 }, v3 -> { }, v4 -> { } }; attrs={ v1 -> { MustBeValid (read by line 57, column 7) }, v2 -> { MustBeValid (read by line 58, column 12) }, v4 -> { MustBeValid (read by line 58, column 5) } };}] #1: visited=false; { roots={ &n=v1, &ptr=v2 }; mem ={ v1 -> { * -> v3 }, v2 -> { * -> v5 } }; attrs={ v5 -> { CppDelete(was invalidated by `delete`) } };} PRE=[{ roots={ &n=v1, &ptr=v2 }; mem ={ v1 -> { * -> v3 }, v2 -> { * -> v5 }, v3 -> { }, v5 -> { } }; attrs={ v1 -> { MustBeValid (read by line 57, column 7) }, v2 -> { MustBeValid (read by line 60, column 12) }, v5 -> { MustBeValid (read by line 60, column 5) } };}] ``` Reviewed By: ezgicicek Differential Revision: D17906167 fbshipit-source-id: 2e14325c8master
parent
65debe4fe0
commit
fcbcfc3913
Loading…
Reference in new issue