The 2024 Wheel Reinvention Jam just concluded. See the results.

alpha 0.8.3

spx
0.8.3 contains a redesigned overlay mode that is more useful (by providing floating panels instead of a binary blocking and non-blocking mode) and additional startup parameters to utilize this overlay mode. There will still be a few minor fixes in the next updates but no major changes and the mode is now roughly working as intended, as always now compatible with all supported platforms.

In addition to this startup via the command line can now have persistent sessions (expression and breakpoint state) across restarts. The description of those new command line parameters and a small presentation of the new overlay mode will follow at later point. On Linux and Windows 7 overlay mode requires a running compositor. All other platforms (Windows 8-10 and macOS) should enforce this by default.

Next up for 0.9.x are two major goals. The first is to provide support for customized expression visualization, initially this will be used to support (non-continuous) linked lists and image data. The other is to better support C++. One line of C++ can easily contain lots of inlined content from various places, including but not limited to opaque containers. Anything that remotely resembles classic C++ (not to speak of modern C++) is currently not handled well by the debugger. If possible I also want to support partial debug information before 1.0 because for quite some time it is the default on Windows and supported is likely to be expected by a lot of people.

I will look into providing an overview and explanation of all the new features around the time 1.0 arrives.

Download at: https://codeclap.itch.io/codeclap


CHANGELOG

[00.08.03]
* [Linux] Changed input handling to not process some mouse events that the window should not react to
* Improved stack unwinding

[00.08.02]
* [DWARF] Fixed a case where DW_AT_ranges would not use the correct compilation unit base address
(this broke locating the correct compilation unit on recent macOS clang builds)
* Added a --clearall startup parameter that clears all persistent sessions started from the command line
* [Linux] Fixed potentially triggering a xcb assertion when stepping over a call instruction in source mode
* Initial fix to support calling stack protected functions in expressions

[00.08.01]
* Added the ability to persist sessions started from the command line (--session)
. Expressions and breakpoints will be restored when the binary path matches with a previous one
. Optionally a custom name can be added after --session to utilize multiple sessions per binary
. Use --clear in combination with --session to clear the saved state
* Fixed a few cases where the position of the output window would not be restored correctly between restarts
* Fixed a crash when trying to display registers in the expression panel as ",mem"

[00.08.00]
* Redesigned overlay mode (overlay mode is meant to debug without fully dedicating a whole monitor or parts of a monitor for the debugger alone)
. Made fully compatible with Windows, Linux and macOS
. Overlay mode can be enabled in the configuration panel or using the command line switches "--overlay" and optionally a monitor position description
. Visual selection of the monitor that is used for the debugger overlay is possible using the configuration panel
. Moving and resizing of the movable panel containers for the debugger overlay is possible in the configuration panel,
changing position or size while using the debugger will be persisted on exit
. The debugger does not occupy the complete monitor anymore but instead the different panels are placed in separate movable windows
. All elements of the debugger are always on top, but interaction with anything behind a transparent area is possible without limitations
. Certain keybindings will be available as global keybindings even when the debugger elements don't have focus and will give focus to the debugger (see keybindings)
. All normal keybindings are available when the debugger has focus
. Full expression and breakpoints panels are only shown when the have focus, otherwise a smaller mostly non-interactive overlay is shown
* Added additional command line parameters to overlay mode
. optional argument to --overlay: Specifies which monitor to use using a description of the monitor location
. Format: origin[[+-][1-9]?[xy]]*
. Origin: May be one of the following special values
. self: The monitor on which the main debugger window would have been opened by the OS
. left/right/top/bottom: The left/right/top/bottom-most monitor
. [+-]1-9[xy]: Moves the currently selected monitor by +- 1-9 (1 if omitted) in the direction of x or y
* Close autocomplete dialog after adding a new breakpoint as intended
* Do not open the debugger when trying to debug a non-existing or unreadable file and print an error instead
* [PDB] Fixed using debug files with more than 255 module streams
* Added preliminary printing for signed chars with more than 1 bytes as integer representation
* Highlight the currently active preset for keybinding and theme

Comments

Awesome, can't wait to try it :)
albatros
Awesome, can't wait to try it :)


The difference for normal debugging is probably rather small compared to 0.7.6. However 0.9 will be a bigger update in that regards. Unfortunately that means the update will also take a little bit longer to be ready.
Thanks for the release trying it out now.

One issue that I am having that existed in 0.7.2 also is the ability to expand large arrays in the expression window. For example if I have an array like "char buffer[8096]" and add buffer to the expression window the debugger starts responding very slow after clicking on the plus icon to expand the individual elements. Using buffer,mem works great though without any noticeable performance impacts. If I increase the buffer size to 32,384 codeclap will just close when trying to expand.
joe513
For example if I have an array like "char buffer[8096]" and add buffer to the expression window the debugger starts responding very slow after clicking on the plus icon to expand the individual elements. Using buffer,mem works great though without any noticeable performance impacts. If I increase the buffer size to 32,384 codeclap will just close when trying to expand.


Thanks for pointing that out. Out of my head I think that this is expected behavior but something that needs to be improved. The expression window has no concept of what is actually visible which can likely cause performance degradation for a higher number of elements. The allocator used for that is partially guarded against overflows but definitely has a maximum size, hitting that would fail ungracefully right now.
Codeclap 0.8.3 fails on my computer.

here is the backtrace when launched for a hello world :

/home/user/code/codeclap/codeclap --chdir /home/user/code/ccode/template /home/user/code/ccode/template/a.out main.c:5


Program terminated with signal SIGILL, Illegal instruction.
#0 0x00000000004f9b6b in DebuggerInjectAsm.constprop.232 ()
[Current thread is 1 (Thread 0x7fe38646b700 (LWP 26378))]
(gdb) bt
#0 0x00000000004f9b6b in DebuggerInjectAsm.constprop.232 ()
#1 0x00000000004f9cdd in DebuggerInject ()
#2 0x00000000004f8b12 in ProcessWorkItem.constprop.231 ()
#3 0x00000000004fb29b in DebuggerMainLoop ()
#4 0x00007fe38f512a9d in start_thread () from /usr/lib/libpthread.so.0
#5 0x00007fe38f442b23 in clone () from /usr/lib/libc.so.6


I'm falling back on last version on the meantime.
Don't hesitate to ask me if I can be of any help if I can be of any help.

[Edit] woops nevermind, the old version doens't work either. They were definetly working before. I must have made something weird on my part.
albatros
I'm falling back on last version on the meantime.
Don't hesitate to ask me if I can be of any help if I can be of any help.

woops nevermind, the old version doens't work either. They were definetly working before. I must have made something weird on my part.


That's unfortunate, seems on Linux the "run to" syntax from the terminal broke with the last 0.7.x build (0.7.2 should work); at the very least that is the state now on my fully-updated systems. At the moment I don't have an automated way of catching these kind of defects but I will look into adding tests for this as well.
You were right ! I was indeed one version more behind, 0.7.2 work for me :)

albatros
You were right ! I was indeed one version more behind, 0.7.2 work for me :)


I am currently in the process of making an intermediate build that is about half the way to 0.9 but should hopefully replace all previous builds for good, making all the small fixes that have been going over time available to you. Unfortunately it is not quite ready yet and I am away for a little under 1 week, but I will push it as soon as possible.
That's awesome. It's true that I'm impatient to enjoy the new features, but I do know writing good software takes time. Take all the time you need :)