|Last modified on Tue Jan 11 20:47:18 2022 UTC.||Improve this page|
Stepping into any function requires the presence of the debug information. Normally, the implementation of the
printf() family of functions is in the standard C library, which does not include debugging information.
However, for common GCC setups, using the open source newlib library, the source code of any function is available; it can be (temporarily) brought into the project and compiled with debugging information.
The newlib sources can be cloned from:
git clone git://sourceware.org/git/newlib-cygwin.git
Create a subfolder in the source folder (for example
newlib-libc) and copy the desired files from
newlib-cygwin.git/newlib/libc/stdio. You may also need to copy some additional headers, from related folders.
For example, to step into
trace::printf(), the following files were required:
$ tree newlib-libc newlib-libc ├── locale │ └── setlocale.h ├── stdio │ ├── dtoa.c │ ├── fvwrite.h │ ├── local.h │ ├── mprec.c │ ├── mprec.h │ ├── nano-vfprintf.c │ ├── nano-vfprintf_float.c │ ├── nano-vfprintf_local.h │ ├── snprintf.c │ ├── vfieeefp.h │ └── vsnprintf.c └── stdlib └── local.h 3 directories, 13 files
For the build to pass, it might be necessary to define some macros; for the above tree, the following definitions were required:
Please note that the newlib sources are far from warning free, and it is recommended to disable any warning checks for the
If the newlib nano version is used (as in the example above), and printing floats is desired, the routines to convert floats need to be explicitly included, by adding
-u _printf_float to the linker.