So-ADE debugger logo

Q  What is So-ADE debugger?

A So-ADE debugger is a Qt-Creator plugin that extends the built-in debugger for Qt-Creator. It provides:

Q What is a Pretty Printer?

A A Pretty Printer is an extension to gdb that format the data from the program under debug so that it is very easy to understand the meaning of a variable. For example, without Pretty Printing a std::string looks like:

>&"p s10\n"

>~"$1 = {static npos = 4294967295"

>~", _M_dataplus = {> = {<__gnu_cxx::new_allocator> = {}, }, _M_p = 0xbffff120 \"01234\""


>~", _M_string_length = 5"

>~", {_M_local_buf = \"01234\\000J\\267D\\361\\377\\277\\303\\343\\024\\267\""

>~", _M_allocated_capacity = 858927408"



Whereas it is displayed as "01234" when using the right Pretty Printer.

Q What resource are available to train on So-ADE debugger?

A In the download section, you may find presentation from the Qt Contributors summit 2017 presentation.

Q What are the benefit of using So-ADE debugger?

A Based on a study from the University of Cambridge, “on average, software developers spend 50% of their programming time finding and fixing bugs. When projecting this figure onto the total cost of software development, the study estimated that the total cost of debugging software amounts to $312 billion per year. The significant amount of time spent on debugging represented to the researchers an important opportunity to improve development productivity”. So-ADE debugger can significantly improve the debugging efficiency by helping developers to access to the data manipulated by the program and understand the underlying dynamic of the software.

Q What are the supported version of Qt-Creator?

A So-ADE debugger is compatible with Qt-Creator 4.3 releases. (Qt-Creator has internal API changes which restrict usage on others releases). It is available on both Linux and Windows (using GDB framework). However, due to internal API requirement, So-ADE debugger is delivered with a specific built of Qt-Creator and may not work with others built (special build switches are needed).

Q What is the licence of So-ADE debugger?

A So-ADE debugger is open-source since version 2.1. It is release under GPL 3.0 licence.

Q What is it that makes So-ADE debugger so different from other GDB Pretty Printers?

A So-ADE debugger is not just another Pretty Printer collection. Typical Pretty Printers in GDB are dedicated pieces of code that can only suit one specific functionality. So-ADE debugger is a Pretty Printer generator that works from a class model. The introduced abstraction makes it very easy to create Pretty Printers that suit your own personal needs.

Q I can't find So-ADE debugger configuration panel. Where is it located?

A So-ADE debugger configuration panel is available under Qt-Creator Debugger options panel. There is a new section named “So-ADE plugin”.

Q What are the kind of object I can model with So-ADE debugger?

A: So-ADE debugger is a generic engine. It can cater for almost any kind of struct/class you may have in your C/C++ code. It is as well suited for data re-interpretation (integer constant, enum,...), container modeling (It comes with support for Qt, Std and boost container as case sample), as for standard fields collection, strings or binary stream.

Q Is there some limitation for the model I can build?

A So-ADE debugger actual version has some limitation regarding heterogeneous data collection (Variant). You may still model this one using the Python extension API, but this is not as simple as for the other types. We are working on this and the next release will support this type of data as well. If you encounter specific difficulties with our model, please let us know.

Q How difficult is it to learn how to use So-ADE debugger?

A So-ADE debugger comes with a large set of case samples (Qt, std and boost libraries). You may learn from these models. Also So-ADE debugger  interface is fully documented. The “What's this” button (the small ? In the upper corner) provides access to a local documentation for every single feature of the interface with concept explanation.

Q How long is it to build a new container model?

A The container model are based on 2 approaches for storing the data: sequential storage (like arrays) or linked storage (like list, maps,...). If your container fit in this description, it is quite easy and quick to build the model. All you need it to explain the model:

Most of the time the longest part is to understand the container implementation if you did not write it!

Q What programming language are used to configure models in So-ADE debugger?

A Most configurations in So-ADE debugger are done through our built-in expression language (very similar to any expression in most modern language). It has the advantage to be more compact and easier to learn than GDB Python extension language.

For example the expression to format a QPoint is: ”x=”;.x,”y=”;.y which concatenate 4 expressions. The concatenation operators are : ',' (with space) and ';' (no space).

.x and .y are used to access to the sub-fields x and y (regardless of the current object being a pointer, a reference or a QPoint itself).

If it is not possible to perform the wanted operation using the expression language, you may also use the fully feature Python semantic to build the desired result. For that purpose you have access to GDB Python extension features.

Q I am using a std::list in my program and MyComplexData has dozen of fields. Currently, for a specific algorithm, I only need to access to two particulars sub-fields and unfolding each list element to check the data is not practical. How can So-ADE debugger help viewing my list globally?

A So-ADE debugger is providing the ability to customize the container display on a per variable basis. You can request the std::list container (1-D) to be turned into a 2-D container and display any of the sub-fields of  MyComplexData as key/value. This is done through the contextual menu in the  locals viewer (option “Change Value Display Format/So-ADE: Customize Container”).

Q I have a container with hundreds of managed elements. I would like to quickly find elements with a specific property.  How can So-ADE debugger help filtering the container?

A So-ADE debugger is providing the ability to customize the container display on a per variable basis. This also includes the ability to filter the displayed values. For that purpose you may define a filtering rule on any sub-field of the key (or value or both). This is done through the contextual menu in the  locals viewer (option “Change Value Display Format/So-ADE: Customized Container”).

Q So-ADE debugger  displays < items> for a container. What does it mean?

A Some containers do not store the number of managed elements in their internal data structures (Or the value can't easily be computed). The only way to get it is to effectively iterate over the managed elements. This is a time consuming operation. Therefore So-ADE debugger does not compute the number of elements unless the container is unfolded to save CPU.

Q I have built a model, but do not get the expected result (I can't see my data and So-ADE debugger  displays . How can I track the error and fix it?

A There are many reasons that can cause a model not to work correctly (Invalid field name, wrong Python code, corrupted data,...). First, you have to ensure that when you test a model, you apply it on a fully validated data sample. It avoids noise related to corrupted data. Secondly, you should enable So-ADE debugger built-in Pretty Printers debugger (option “Enable Pretty Printer Debug Mode”).

In this mode, the generated code is instrumented on a per line basis and So-ADE debugger can report the exact source of the error. Once an error is found, the related Pretty Printer configuration wizard is automatically open and So-ADE debugger directly points to the erroneous configuration.

Q I have a core dump. Can I use So-ADE debugger to analyse it?

A Yes. So-ADE debugger can read data from core dump, provided that you do not make use of any inferior callbacks (methods or function calls) while developing your class model. This is a valid reason to avoid using this feature if possible. On the other hand, using callbacks has also the inconvinient of being really bad, performance wise.

Q I have developed Pretty Printers for the library I wrote. How can I make them available to others?

A If the library is open source and has large usage, we can distribute it for you as part of So-ADE debugger . You may also distribute yourself the configuration file for you library. For that purpose the tool provides export and import functions.

Q When working with iterator, some time I can see '[Container End]' while the iterator points to the end of a container. Why isn't it always the case?

A This feature is dependant on the iterator implementation. In some case it is possible to buid logic that determine the container end condition, while in many other cases it is not possible.

Q I have a enum model, but the automatically computed configuration is not perfect. How can i fix it?

A Enum interpretation is not always possible as many usages are possible for the same enum. So-ADE debugger compiler guess one one the possible interpretation based on internal heuristics. However, you are still be able to correct the guess by editing the result through the options provided in the contextual menu on the "Parsed Definition" tab.