X-Git-Url: https://git.karo-electronics.de/?a=blobdiff_plain;ds=sidebyside;f=doc%2Fhtml%2Fuser-guide%2Fdebugging-techniques.html;fp=doc%2Fhtml%2Fuser-guide%2Fdebugging-techniques.html;h=9cda45f7a12e47085ad0f7faacc90af64233895f;hb=2b5bec7716c03d42cfb16d8c98c9cea573bf6722;hp=0000000000000000000000000000000000000000;hpb=47412fc4bd1aefc0d5498bcb3860a9d727196f16;p=karo-tx-redboot.git diff --git a/doc/html/user-guide/debugging-techniques.html b/doc/html/user-guide/debugging-techniques.html new file mode 100644 index 00000000..9cda45f7 --- /dev/null +++ b/doc/html/user-guide/debugging-techniques.html @@ -0,0 +1,350 @@ + + + + + + + + +Debugging Techniques +
eCos User Guide
PrevNext

Chapter 27. Debugging Techniques

Table of Contents
Tracing
Kernel Instrumentation

eCos applications and components can be debugged in + traditional ways, with printing statements and debugger + single-stepping, but there are situations in which these + techniques cannot be used. One example of this is when a + program is getting data at a high rate from a real-time + source, and cannot be slowed down or interrupted.

eCos’s infrastructure module provides a + tracing formalism, allowing the + kernel’s tracing macros to be configured in many useful + ways. eCos’s kernel provides instrumentation + buffers which also collect specific + (configurable) data about the system’s history and + performance.

Tracing

To use eCos’s tracing facilities you must first + configure your system to use tracing. + You should enable the Asserts and Tracing component + (CYGPKG_INFRA_DEBUG) and the + Use tracing component within it + (CYGDBG_USE_TRACING). These + options can be enabled with the Configuration + Tool or by editing the file + BUILD_DIR/pkgconf/infra.h + manually.

You should then examine all the tracing-related options in +the Package: Infrastructure chapter of the eCos Reference +Manual. One useful set of configuration options are: CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS and CYGDBG_INFRA_DEBUG_TRACE_MESSAGE, +which are both enabled by default when tracing is enabled.

The following “Hello world with tracing” shows +the output from running the hello world program (from the Section called eCos Hello World in Chapter 13) that was +built with tracing enabled:

Example 27-1. Hello world with tracing

$ mips-tx39-elf-run --board=jmr3904  hello
+Hello, eCos world!
+ASSERT FAIL: <2>cyg_trac.h          [ 623] Cyg_TraceFunction_Report_::set_exitvoid()                                                            exitvoid used in typed function
+TRACE: <1>mlqueue.cxx         [ 395] Cyg_ThreadQueue_Implementation::enqueue()                                                            {{enter
+TRACE: <1>mlqueue.cxx         [ 395] Cyg_ThreadQueue_Implementation::enqueue()                                                            }}RETURNING UNSET!
+TRACE: <1>mlqueue.cxx         [ 126] Cyg_Scheduler_Implementation::add_thread()                                                           }}RETURNING UNSET!
+TRACE: <1>thread.cxx          [ 654] Cyg_Thread::resume()                                                                                 }}return void
+TRACE: <1>cstartup.cxx        [ 160] cyg_iso_c_start()                                                                                    }}return void
+TRACE: <1>startup.cxx         [ 142] cyg_package_start()                                                                                  }}return void
+TRACE: <1>startup.cxx         [ 150] cyg_user_start()                                                                                     {{enter
+TRACE: <1>startup.cxx         [ 150] cyg_user_start()                                                                                     (((void)))
+TRACE: <1>startup.cxx         [ 153] cyg_user_start()                                                                                     'This is the system default cyg_user_start()'
+TRACE: <1>startup.cxx         [ 157] cyg_user_start()                                                                                     }}return void
+TRACE: <1>sched.cxx           [ 212] Cyg_Scheduler::start()                                                                               {{enter
+TRACE: <1>mlqueue.cxx         [ 102] Cyg_Scheduler_Implementation::schedule()                                                             {{enter
+TRACE: <1>mlqueue.cxx         [ 437] Cyg_ThreadQueue_Implementation::highpri()                                                            {{enter
+TRACE: <1>mlqueue.cxx         [ 437] Cyg_ThreadQueue_Implementation::highpri()                                                            }}RETURNING UNSET!
+TRACE: <1>mlqueue.cxx         [ 102] Cyg_Scheduler_Implementation::schedule()                                                             }}RETURNING UNSET!
+TRACE: <2>intr.cxx            [ 450] Cyg_Interrupt::enable_interrupts()                                                                   {{enter
+TRACE: <2>intr.cxx            [ 450] Cyg_Interrupt::enable_interrupts()                                                                   }}RETURNING UNSET!
+TRACE: <2>thread.cxx          [  69] Cyg_HardwareThread::thread_entry()                                                                   {{enter
+TRACE: <2>cstartup.cxx        [ 127] invoke_main()                                                                                        {{enter
+TRACE: <2>cstartup.cxx        [ 127] invoke_main()                                                                                        ((argument is ignored))
+TRACE: <2>dummyxxmain.cxx     [  60] __main()                                                                                             {{enter
+TRACE: <2>dummyxxmain.cxx     [  60] __main()                                                                                             (((void)))
+TRACE: <2>dummyxxmain.cxx     [  63] __main()                                                                                             'This is the system default __main()'
+TRACE: <2>dummyxxmain.cxx     [  67] __main()                                                                                             }}return void
+TRACE: <2>memcpy.c            [ 112] _memcpy()                                                                                            {{enter
+TRACE: <2>memcpy.c            [ 112] _memcpy()                                                                                            ((dst=80002804, src=BFC14E58, n=19))
+TRACE: <2>memcpy.c            [ 164] _memcpy()                                                                                            }}returning 80002804
+TRACE: <2>cstartup.cxx        [ 137] invoke_main()                                                                                        'main() has returned with code 0. Calling exit()'
+TRACE: <2>exit.cxx            [  71] __libc_exit()                                                                                        {{enter
+TRACE: <2>exit.cxx            [  71] __libc_exit()                                                                                        ((status=0 ))
+TRACE: <2>atexit.cxx          [  84] cyg_libc_invoke_atexit_handlers()                                                                    {{enter
+TRACE: <2>atexit.cxx          [  84] cyg_libc_invoke_atexit_handlers()                                                                      (((void)))
+
+Scheduler:
+
+Lock:                0
+Current Thread:      <null>
+
+Threads:
+
+Idle Thread          pri =  31 state = R      id =   1
+                     stack base = 800021F0 ptr = 80002510 size = 00000400
+                     sleep reason NONE     wake reason NONE    
+                     queue = 80000C54      wait info = 00000000
+
+<null>               pri =   0 state = R      id =   2
+                     stack base = 80002A48 ptr = 8000A968 size = 00008000
+                     sleep reason NONE     wake reason NONE    
+                     queue = 80000BD8      wait info = 00000000
+	  

PrevHomeNext
Compiling a C++ ApplicationUpKernel Instrumentation
\ No newline at end of file