Compiler-Enabled Execution Tracking for Software Debugging

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Existing debugging and analysis techniques for software systems incur significant overhead, affecting performance and memory usage, while also failing to provide adequate information for debugging and analysis, especially in embedded systems where reproducing error conditions is difficult.

Innovation Solution

A compiler-enabled execution tracking method that generates lightweight debug operations unconditionally bound to unique identifiers, allowing for 'always-on' debugging without performance impact, by incrementing counters or storing indications in memory, and providing rich debugging information without memory or execution overhead.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Loss of information

If traditional debugging techniques are used to generate always-available debugging information, then debugging information availability is improved, but system performance deteriorates due to overhead in execution speed, binary code size, and memory usage

Engineering Contradiction:
Improvedebugging information availabilityVSAvoidsystem execution speed
Core Design Contradiction:
Loss of informationVSProductivity

Solution Approach 1:

The patent extracts debugging information generation from the runtime execution path by using compiler-generated unique identifiers that are bound to specific operations. This allows debugging information to be collected without executing traditional debugging code during runtime, thereby maintaining execution speed while still providing comprehensive debugging data through the uniquely identified operation markers.

Inventive Principle:
Principle #2Taking out (Extraction)

2Loss of information

If traditional debugging techniques are used to generate always-available debugging information, then debugging information availability is improved, but memory usage increases

Engineering Contradiction:
Improvedebugging information availabilityVSAvoidmemory usage
Core Design Contradiction:
Loss of informationVSQuantity of substance

Solution Approach 1:

The patent uses lightweight unique identifiers generated by the compiler that act as disposable markers for debugging purposes. These identifiers are embedded in the binary code and memory structures but require minimal additional memory resources. The identifiers are simple unique values that can be efficiently stored and processed without requiring complex debugging infrastructure, thus providing adequate debugging information with minimal memory overhead.

Inventive Principle:
Principle #27Cheap short-living objects (Disposable)

3Loss of information

If traditional debugging techniques are used to generate always-available debugging information, then debugging information completeness is improved, but binary code size increases

Engineering Contradiction:
Improvedebugging information completenessVSAvoidbinary code size
Core Design Contradiction:
Loss of informationVSWeight of stationary object

Solution Approach 1:

The patent applies local quality by inserting unique identifiers at specific operation points within the binary code rather than adding comprehensive debugging infrastructure throughout the entire codebase. Each unique identifier is locally bound to a specific operation, providing targeted debugging information where needed while keeping the overall binary code size minimal. This localized approach allows complete debugging information to be generated from strategically placed identifiers rather than from pervasive debugging code.

Inventive Principle:
Principle #3Local quality

Data Source

PatentUS11669432B1Compiler-enabled application execution tracking
Publication Date: 2023.06.06 CISCO TECHNOLOGY INC
  • US11669432B1 patent drawing
  • US11669432B1 patent drawing
  • US11669432B1 patent drawing

AI summary

This disclosure describes techniques to compile source code corresponding to a portion of a software program. The techniques include generating first object code by processing the source code. Based at least in part on processing the source code, generating second object code, wherein the second object code, when executed by one or more processors, causes the one or more processors to perform an operation unconditionally bound to a unique identifier of the operation. The described techniques further include generating an indication of a mapping of the unique identifier to the portion of the software program.