Flexible Error Trace Mechanism for C/C++ Debugging

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Debugging errors in C/C++ programs is challenging due to the lack of information about error locations in error status returns, making it time-consuming and difficult to identify the root cause, especially for errors that are hard to reproduce, as standard debugging tools often require special debug build libraries and do not provide sufficient stack trace information.

Innovation Solution

A flexible error trace mechanism is implemented that records thread-private data for error trace elements, including source file name, function name, line number, and error type, allowing for the creation of error traces that can be retrieved and used for debugging, which can be integrated into C/C++ interface libraries and other programming languages, enabling error tracing at runtime.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Loss of information

If standard debugging tools are used to trace errors, then error location information can be obtained, but special debug build libraries are required which are not available in production environments

Engineering Contradiction:
Improveerror location informationVSAvoidenvironment compatibility
Core Design Contradiction:
Loss of informationVSAdaptability or versatility

Solution Approach 1:

The error tracing functionality is segmented into a separate library component that can be independently compiled and linked. This allows the tracing mechanism to be selectively enabled in debug builds while maintaining compatibility with production optimized builds, as the tracing code can be conditionally compiled or disabled without affecting the core application functionality.

Inventive Principle:
Principle #1Segmentation

Solution Approach 2:

An intermediary tracing library is introduced between the application code and the standard debugging tools. This intermediary layer captures error information at the source using standard C/C++ mechanisms, formats it appropriately, and makes it available to debugging tools without requiring the application to directly depend on specific debug build libraries, thus improving environment compatibility.

Inventive Principle:
Principle #24Intermediary (Mediator)

2Loss of information

If error tracing information is collected for all function calls, then complete error location data is obtained, but the complexity and overhead of the tracing mechanism increases

Engineering Contradiction:
Improveerror trace completenessVSAvoidtracing mechanism complexity
Core Design Contradiction:
Loss of informationVSDevice complexity

Solution Approach 1:

Instead of tracing all function calls unconditionally, the mechanism applies partial action by selectively tracing only those functions and error conditions that are relevant to debugging. The tracing can be configured to capture only error paths, specific function types, or critical sections, reducing the overall complexity while maintaining sufficient trace completeness for effective debugging.

Inventive Principle:
Principle #16Partial or excessive action

Solution Approach 2:

The tracing mechanism applies local quality by enabling detailed tracing only in specific locations or contexts where error information is most valuable. Different tracing depths and levels can be applied to different parts of the codebase, with critical sections receiving full tracing while less important areas use minimal or no tracing, thereby reducing overall system complexity.

Inventive Principle:
Principle #3Local quality

3Measurement precision

If detailed error trace elements are recorded for every error, then comprehensive debugging information is available, but the memory and processing overhead increases

Engineering Contradiction:
Improveerror information detailVSAvoidmemory overhead
Core Design Contradiction:
Measurement precisionVSQuantity of substance

Solution Approach 1:

The tracing mechanism supports parameter changes by allowing dynamic adjustment of tracing detail levels. Users can configure the amount of information captured per error event (e.g., full stack trace vs. immediate function only, detailed error context vs. basic error code), enabling the system to adapt memory usage to available resources while maintaining sufficient measurement precision for debugging needs.

Inventive Principle:
Principle #35Parameter changes

Data Source

PatentUS7685573B2Flexible error trace mechanism
Publication Date: 2010.03.23 ORACLE AMERICAN INC
  • US7685573B2 patent drawing
  • US7685573B2 patent drawing
  • US7685573B2 patent drawing

AI summary

For a flexible error trace mechanism, embodiments may be implemented for C/C++ interface libraries, or in programs written in C/C++ or other programming languages. In one embodiment, when an error occurs in a function call, a trace element may be recorded that may include the source file name, function name, line number and other information that may be used to identify the error. In one embodiment, the library function may call a plurality of library functions in a function call stack. For each of the plurality of library functions, if the library function generates an error, an error trace element may be added to the error trace. After completion of the library function, the program may obtain the error trace for the library function. The error(s), if any, may be debugged using the information in the obtained error trace.