{'fraction_non_alphanumeric': 0.033769813921433495, 'fraction_numerical': 0.0013783597518952446, 'mean_word_length': 5.511210762331839, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
A Toolkit for Visualizing the Runtime Behavior of TinyOS Applications

TinyOS has proven to be an effective platform for developing reactive embedded network applications. However, the platform's lean programming model and power-efficient operation come at a price: TinyOS applications are notoriously difficult to construct and debug. The development difficulties stem, in large part, from a programming model founded on events and deferred execution. In short, the model introduces non-determinism in the execution ordering of primitive actions (i.e., commands, events, and tasks). The resulting set of possible execution sequences is typically large, and can swamp developers' unaided intellectual ability to reason about program behavior. In this paper, we present a platform-neutral visualization toolkit for TinyOS 2.0 to aid in program comprehension. The goal is to assist developers in reasoning about the computation forest underlying a system under test, and the particular branches chosen during each run. The toolkit design includes (i) a full-featured static analysis and instrumentation library, (ii) a selection-based probe insertion system, (iii) a lightweight event recording service, (iv) a trace extraction and reconstruction tool, and (v) two visualization front-ends. We demonstrate the utility of the toolkit using standard system examples, and present an analysis of the toolkit's resource usage and performance characteristics.