Friday, May 18, 2012

C++ gdb GUI


Briefly: Does anyone know of a GUI for gdb that brings it on par or close to the feature set you get in the more recent version of Visual C++?



In detail: As someone who has spent a lot of time programming in Windows, one of the larger stumbling blocks I've found whenever I have to code C++ in Linux is that debugging anything using commandline gdb takes me several times longer than it does in Visual Studio, and it does not seem to be getting better with practice. Some things are just easier or faster to express graphically.



Specifically, I'm looking for a GUI that:



  • Handles all the basics like stepping over & into code, watch variables and breakpoints

  • Understands and can display the contents of complex & nested C++ data types

  • Doesn't get confused by and preferably can intelligently step through templated code and data structures while displaying relevant information such as the parameter types

  • Can handle threaded applications and switch between different threads to step through or view the state of

  • Can handle attaching to an already-started process or reading a core dump, in addition to starting the program up in gdb



If such a program does not exist, then I'd like to hear about experiences people have had with programs that meet at least some of the bullet points. Does anyone have any recommendations?



Edit:

Listing out the possibilities is great, and I'll take what I can get, but it would be even more helpful if you could include in your responses:

(a) Whether or not you've actually used this GUI and if so, what positive/negative feedback you have about it.

(b) If you know, which of the above-mentioned features are/aren't supported



Lists are easy to come by, sites like this are great because you can get an idea of people's personal experiences with applications.


Source: Tips4all

10 comments:

  1. Although I will get massively downranked for this, you won't find anything overlaying GDB which can compete with the raw power of the Visual Studio debugger. It's just too powerful, and it's just too well integrated inside the IDE.

    For a Linux alternative, try DDD if free software is your thing.

    ReplyDelete
  2. Eclipse CDT will provide an experience comparable to using Visual Studio. I use Eclipse CDT on a daily basis for writing code and debugging local and remote processes.

    If your not familiar with using an Eclipse based IDE, the GUI will take a little getting used to. However, once you get to understand the GUI ideas that are unique to Eclipse (e.g. a perspective), using the tool becomes a nice experience.

    The CDT tooling provides a decent C/C++ indexer that allows you to quickly find references to methods in your code base. It also provides a nice macro expansion tool and limited refactoring support.

    With regards to support for debugging, CDT is able to do everything in your list with the exception of reading a core dump (it may support this, but I have never tried to use this feature). Also, my experience with debugging code using templates is limited, so I'm not sure what kind of experience CDT will provide in this regard.

    For more information about debugging using Eclipse CDT, you may want to check out these guides:


    Interfacing with the CDT debugger, Part 2: Accessing gdb with the Eclipse CDT and MI
    CDT Debug Tutorial

    ReplyDelete
  3. gdb -tui works okay if you want something GUI-ish, but still character based.

    ReplyDelete
  4. I use DDD a lot, and it's pretty powerful once you learn to use it. One thing I would say is don't use it over X over the WAN because it seems to do a lot of unnecessary screen updates.

    Also, if you're not mated to GDB and don't mind ponying up a little cash, then I would try TotalView. It has a bit of a steep learning curve (it could definitely be more intuitive), but it's the best C++ debugger I've ever used on any platform and can be extended to introspect your objects in custom ways (thus allowing you to view an STL list as an actual list of objects, and not a bunch of confusing internal data members, etc.)

    ReplyDelete
  5. I loathe the idea of Windows development, but the VC++ debugger is among the best I've seen. I haven't found a GUI front end that comes close to the VC one.

    GDB is awesome once you really get used to it. Use it in anger enough and you'll become very proficient. I can whiz around a program doing all the things you listed without much effort anymore. It did take a month or so of suffering over a SSH link to a remote server before I was proficient. I'd never go back though.

    DDD is really powerful but it was quite buggy. I found it froze up quite often when it got messages from GDB that it didn't grok. It's good because it has a gdb interface window so you can see what's going on and also interact with gdb directly. DDD can't be used on a remote X session in my environment (a real problem, since I'm sitting at a thin client when I do Unix dev) for some reason so it's out for me.

    KDevelop followed typical KDE style and exposed EVERYTHING to the user. I also never had any luck debugging non KDevelop programs in KDevelop.

    The Gnat Programming Studio (GPS) is actually quite a good front-end to GDB. It doesn't just manage Ada projects, so it's worth trying out if you are in need of a debugger.

    You could use Eclipse, but it's pretty heavy weight and a lot of seasoned Unix people I've worked with (me included) don't care much for its interface, which won't just STFU and get out of your way. Eclipse also seems to take up a lot of space and run like a dog.

    ReplyDelete
  6. Qt Creator seems like good stuff. A colleague showed me one way set it up for debugging:


    Create a new project, "Import of Makefile-based Project".
    Point it to your root project folder (it will index sources under it, and it is impressively fast).
    Go to project settings and add a run configuration, then specify the executable you want to debug, and its arguments.
    Qt Creator seems to insist on building your project before debugging it. If you don't want that, or don't use make, you can override the make command. I changed it to "true". :)


    That may seem like a bit much work for debugging an app I had already compiled, but it is worth it. The debugger shows threads, stacks and local variables in a similar way to Visual Studio and even uses many of the same keyboard shortcuts. It seems to handle templates well, at least std::string and std::map. Attaching to existing processes and core dumps seems to be supported, though I haven't tested it yet.

    Keep in mind that I used it for less than and hour now, but I'm impressed so far.

    ReplyDelete
  7. I use cgdb, simple and usefull

    ReplyDelete
  8. Check out the Eclipse CDT project. It is a plugin for Eclipse geared towards C/C++ development and includes a fairly feature rich debugging perspective (that behind the scenes uses GDB). It is available on a wide variety of platforms.

    ReplyDelete
  9. Check out Nemiver C/C++ Debugger. It is easy to install in Ubuntu (Developer Tools/Debugging).

    ReplyDelete
  10. DDD is the GNU frontend for gdb: http://www.gnu.org/software/ddd/

    ReplyDelete