Public Member Functions
|ACE_Stack_Trace (ssize_t starting_frame_offset=0, size_t num_frames=0)|
|Grab a snapshot of the current stack trace and hold it for later use. |
|const char *||c_str () const|
|Return buffer as a C-style string. |
Static Public Attributes
|static const size_t||SYMBUFSIZ = ACE_STACK_TRACE_SYMBUFSIZ|
Private Member Functions
|void||generate_trace (ssize_t starting_frame_offset, size_t num_frames)|
Static Private Attributes
|static const char||UNSUPPORTED  = "<stack traces unsupported platform>"|
|static const char||UNABLE_TO_GET_TRACE  = "<unable to get trace>"|
A new conversion character, the question mark, was added to ACE_Log_Msg for stack trace logging. The %? conversion character was added as a convenience so that users need not instantiate an ACE_Stack_Trace instance solely for the purpose of printing it in an ACE logging message. The following are functionally equivalent:
These usage examples were shown in $ACE_ROOT/tests/Stack_Trace_Test.cpp.
Since stack trace buffer size has limitation(
ACE_STACK_TRACE_SYMBUFSIZ), you will not get a complete stack trace if
ACE_STACK_TRACE_SYMBUFSIZ value is less than actual stack trace data length. To get a complete stack trace, you need set
ACE_STACK_TRACE_SYMBUFSIZ with a larger value that is enough for the stack trace data in your
config.h file and rebuild ACE.
Using ACE logging mechanism (%?) to log the stack trace also has ACE_MAXLOGMSGLEN size limitation. To get a complete stack trace, you could use different output method. Following is an example.
ACE_Stack_Trace st; ACE_OS::printf("at [%s]\n", st.c_str());
|ACE_Stack_Trace::ACE_Stack_Trace||(||ssize_t|| starting_frame_offset =
|size_t|| num_frames = |
Grab a snapshot of the current stack trace and hold it for later use.
|starting_frame_offset||offset into the array of frames to start printing; 0 is the platform-specific offset for the first frame, positive numbers give less frames, negative give more frames|
|num_frames||the number of stack frames to include (0 indicates platform-specific maximum)|
|const char * ACE_Stack_Trace::c_str||(||)||const|
Return buffer as a C-style string.
|const size_t ACE_Stack_Trace::SYMBUFSIZ = ACE_STACK_TRACE_SYMBUFSIZ
|const char ACE_Stack_Trace::UNABLE_TO_GET_TRACE = "<unable to get trace>"
|const char ACE_Stack_Trace::UNSUPPORTED = "<stack traces unsupported platform>"