Difference between revisions of "Developers"
Uwe Hermann (talk | contribs) m (→Valgrind) |
Uwe Hermann (talk | contribs) m (→Valgrind) |
||
Line 47: | Line 47: | ||
The following instructions outline how you can use [http://valgrind.org/ valgrind] to help find memory-related bugs in the sigrok libraries and frontends. | The following instructions outline how you can use [http://valgrind.org/ valgrind] to help find memory-related bugs in the sigrok libraries and frontends. | ||
''' | '''Debug packages setup (optional):''' | ||
In order to get more useful output from valgrind you can (optionally) install various '''-dbg''' packages (if your distro provides them). | In order to get more useful output from valgrind you can (optionally) install various '''-dbg''' packages (if your distro provides them). |
Revision as of 01:24, 2 January 2013
This page contains documentation and resources for aspiring sigrok developers.
Source code browser
Tutorials and API descriptions
- libsigrok API
- Protocol decoder HOWTO
- Protocol decoder API
- Formats and structures
- Hardware driver API
- Input API
- Output API
- IO API (outdated)
Development guidelines
Please check the respective sub-project's HACKING file for coding guidelines and development tips.
Design pages
This is a list of pages we use while working through new features or designs. They are working documents, not official API or feature documentation.
Debugging
If you would like to see the output of the sr_dbg() or sr_err() functions you can use one of the following sigrok-cli options:
$ export SIGROK_DEBUG=1 $ sigrok-cli -l 5 <options>
Valgrind
The following instructions outline how you can use valgrind to help find memory-related bugs in the sigrok libraries and frontends.
Debug packages setup (optional):
In order to get more useful output from valgrind you can (optionally) install various -dbg packages (if your distro provides them).
Example for libsigrok / libsigrokdecode / sigrok-cli on Debian:
$ apt-get install libgcc1-dbg libpcre3-dbg libglib2.0-0-dbg libftdi1-dbg zlib1g-dbg libasound2-dbg python3-dbg valgrind-dbg
For GTK+ based frontends (e.g. sigrok-gtk) additional packages might be helpful in some cases:
$ apt-get install libgtk2.0-0-dbg libatk1.0-dbg libpango1.0-0-dbg libcairo2-dbg \ libfontconfig1-dbg libx11-6-dbg libxcomposite1-dbg libxfixes3-dbg libxdamage1-dbg \ libpixman-1-0-dbg libxcb1-dbg libx11-xcb1-dbg libxcb-render0-dbg libxcb-shm0-dbg \ libffi5-dbg libxau6-dbg libxdmcp6-dbg libxcursor1-dbg libxi6-dbg libxinerama1-dbg \ libxrender1-dbg libxext6-db libxrandr2-dbg
For Qt based frontends (e.g. sigrok-qt or PulseView) additional packages might be helpful in some cases:
$ apt-get install libboost1.50-dbg libqt4-dbg libstdc++6-4.7-dbg libaudiofile-dbg \ libsm6-dbg libice6-dbg libxt6-dbg libicu48-dbg libjpeg62-dbg
Building:
Here's a short overview of how to build the sigrok subprojects for use with valgrind. Basically everything should be built with -g O0 (enable debug output, and disable compiler optimizations). In this example, everything is installed into a custom install directory ($HOME/sr) in order to have a clean and consistent environment.
$ cd libsigrok; CFLAGS="-g -O0" ./configure --prefix=$HOME/sr && make install $ cd libsigrokdecode; CFLAGS="-g -O0" ./configure --prefix=$HOME/sr && make install $ cd sigrok-cli; CFLAGS="-g -O0" PKG_CONFIG_PATH=$HOME/sr/lib/pkgconfig ./configure --prefix=$HOME/sr && make install $ cd sigrok-gtk; CFLAGS="-g -O0" PKG_CONFIG_PATH=$HOME/sr/lib/pkgconfig ./configure --prefix=$HOME/sr && make install $ cd sigrok-qt; CFLAGS="-g -O0" PKG_CONFIG_PATH=$HOME/sr/lib/pkgconfig qmake && make && cp sigrok-qt $HOME/sr/bin $ cd pulseview; CXXFLAGS="-g -O0" PKG_CONFIG_PATH=$HOME/sr/lib/pkgconfig cmake . && make && cp pulseview $HOME/sr/bin
Usage:
You can now run valgrind with your preferred options against the tools/libs in $HOME/sr. Note that G_SLICE=always-malloc G_DEBUG=gc-friendly should be used to get valgrind-friendly glib behaviour.
Different command-line options, attached hardware and so on, will test different code paths in the libs/tools (e.g. sigrok-cli), of course.
$ LD_LIBRARY_PATH=$HOME/sr/lib G_SLICE=always-malloc G_DEBUG=gc-friendly valgrind -v --tool=memcheck --leak-check=full \ --num-callers=40 --track-origins=yes --leak-resolution=high --track-fds=yes --fullpath-after=. \ --redzone-size=64 --read-var-info=yes ~/sr/bin/sigrok-cli --help
Release process
See Release process.