RemedyBG 0.1.7.0

Latest release, 0.1.7.0, has been posted to itch.io: https://remedybg.itch.io/remedybg

Once again, I appreciate all the feedback. You guys are awesome.

* Fixed potential crash when symbol hash table size is zero.
* If a canonical entry point cannot be found we now fall back to the entry point as specified in
the PE header.
* Fixed a crash when expanding a watch that has an empty subexpression name (e.g., void**)
* Exception indicator is now properly cleared in the text window when target is stopped
* Implement Run To Cursor feature (right-click in text window or Ctrl+F10)
* Added global variable lookups to watch
* In the watch window, if a local variable has been successfully resolved and then goes out of
scope, we will continue to display this value (with grayed text).
* Better text window docking and scrolling behavior; removed cursor from text window; horizontal
scroll bar is now computed over full length of text rather than the just the portion of text on the
screen.
* Change to ensure that using the AltGR modifier does not cause focus to change to a menu.
* Highlight suspended/executing indicator in menu bar.
* Fixed a bug that prevented user from scrolling in the Output window.
* We now display the default working directory (matches executable's directory) in the Session
menu.

--
George

Edited by x13pixels on Reason: Initial post
Some stuff I noticed:
- There is a breakpoint bug. To repro:
1) set a breakpoint on a block that is currently #if 0'ed
2) run, it will create a new breakpoint on the closest active line
3) delete both breakpoints, it crashes on deleting the 2nd breakpoint as it is confused about how many breakpoints there are.
- Saved breakpoints do not display, until you started debugging.

convenience stuff:
- Breakpoints are stored in the .rdgb which makes it kinda annoying to close the program as it pops up a dialog.
- Breakpoints are stored based only on line number as far as I can tell, this gets annoying, as you are probably debugging the part of the program, that you change a lot.
- Pointers in the watch window get displayed with all of their zeros, which is a bit unreadable. I'd suggest either removing the leading zeros or graying them out.

Generally I don't know if saving breakpoints is that good of an idear anyway. Most of the time I open Visual Studio I just remove all of my old breakpoints, but not sure.
Hi,

Great effort, keep it up!

I've been playing around with 0.1.7.0 a bit and here's a list of things I've noticed.

Before getting to that though:
would you consider making a github project for bug/feature tracking? I assume that would be easier for you (but also for us since searching for things would be more convenient than looking through all the forum posts)
Or maybe handmade.network has a bug tracker feature for that?

test app used:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>


__declspec(noinline) void dummy( int val )
{
    printf( "val: %d\n", val );
}

int main()
{
    CRITICAL_SECTION cs;
    InitializeCriticalSection( &cs );   // comment this line out for bug #1 repo
    EnterCriticalSection( &cs );

    printf( "Entering loop\n" );

    for ( ;; )
    {
        int i = rand();
        dummy( i );
        ::Sleep( 10 );
    }

    LeaveCriticalSection( &cs );
    return 0;
}


bugs:
-> start load test app -> hit F5 -> hit break -> dis asm/callstack windows are empty. then hang/crash when trying to shift+f5
-> add support for /DEBUG, the default in VS2017 (not just /DEBUG:FULL)
-> "main" function name missing in callstack window
-> "type" in watch window should be the actual type. int val in dummy is shown as s32 (now I can guess in this case that it's a 32-bit signed int, but that's not the type in the code, nor do I have a typedef for s32 anywhere in the code. if there are more typedefs that you use it might not be obvious for all types what they mean)
-> program output is missing in Output window (it only shows the remedybg output it seems)
-> debugging the sample program, the values for 'i' and 'val' seem to be wrong in the watch window
-> when the source window is open I can't single step in the disassembly anymore (even if i highlight/click into that window)
-> after a while (when trying to single step in disasm after the issue above), hitting F10 and F11 will eventually "resume" the program; control->break will then show an empty disasm window (and eventually freeze remedy)
-> after F11 into a function, hitting F10 the first time (in the source window) makes the yellow arrow vanish (and sometimes frantically jumps around the source window -> try stepping into printf a few layers deep and you should notice it)

features:
-> recent session list
-> keyboard re-binding (specifically I'd love to bind "Control->Break" to a key)
-> automatically open disassembly window when app crash is detected
-> symbol server support (MS symbols...)
-> option for single thread stepping (aka, F10/F11 only resumes the current thread and step there)
-> not sure if bug or feature but: I can't jump between functions in the callstack
-> search functionality in all/source/disasm/watch windows
-> register highlighting (when clicked on/selected) in disasm window
-> option to hide code bytes in diasm
-> disasm window should have an input field where I can write/paste an address and disasm will jump there
-> enable select/copy in (most) windows (e.g. i want to copy the address from the disasm window and paste in the memory window)
-> when entering an address in the mem window, either start the window text at that address (not aligned), or highlight the byte of the address jumped to
-> allow editing in register/watch/memory window
-> (super convenience): "nop" an asm instruction in the disasm window
-> allow to change format/type of register values (int, float, ptr/hex...)
-> in the breakpoint window, allow breakpoints to be deleted with a keyboard key (del) not just the button
-> (super minor): the first column in watch/threads (the one with the yellow arrow) should be fixed size even when expanding/shrinking columns or the window to always fully show the arrow, no less or empty space after
-> resolve variable/function names in the disasm window (where possible)
-> support for pseudo variables in watch windows (e.g.: @TIB)
Recyrillic
Some stuff I noticed:
- There is a breakpoint bug. To repro:
1) set a breakpoint on a block that is currently #if 0'ed
2) run, it will create a new breakpoint on the closest active line
3) delete both breakpoints, it crashes on deleting the 2nd breakpoint as it is confused about how many breakpoints there are.
- Saved breakpoints do not display, until you started debugging.

convenience stuff:
- Breakpoints are stored in the .rdgb which makes it kinda annoying to close the program as it pops up a dialog.
- Breakpoints are stored based only on line number as far as I can tell, this gets annoying, as you are probably debugging the part of the program, that you change a lot.
- Pointers in the watch window get displayed with all of their zeros, which is a bit unreadable. I'd suggest either removing the leading zeros or graying them out.

Generally I don't know if saving breakpoints is that good of an idear anyway. Most of the time I open Visual Studio I just remove all of my old breakpoints, but not sure.


I'll get BP crash fixed. Thanks for pointing it out.

Will figure out a better way to handle breakpoints in files being modified.

That's funny about the leading zeros. I wrote up a bug against Visual Code (using on Linux) for not having all the leading zeros in their pointers. I can see graying out the leading zeros or maybe having an option somewhere for that.

I'll think about it a bit more but I think you're right and that RemedyBG shouldn't save breakpoints.
direbroom


Before getting to that though:
would you consider making a github project for bug/feature tracking? I assume that would be easier for you (but also for us since searching for things would be more convenient than looking through all the forum posts)
Or maybe handmade.network has a bug tracker feature for that?


Tried using Github's issue tracker and didn't like it much. I've been using a desktop application ToDoList instead. I'll poke around and see if there is an online version of something like this.

direbroom

bugs:
-> start load test app -> hit F5 -> hit break -> dis asm/callstack windows are empty. then hang/crash when trying to shift+f5
-> add support for /DEBUG, the default in VS2017 (not just /DEBUG:FULL)
-> "main" function name missing in callstack window
-> "type" in watch window should be the actual type. int val in dummy is shown as s32 (now I can guess in this case that it's a 32-bit signed int, but that's not the type in the code, nor do I have a typedef for s32 anywhere in the code. if there are more typedefs that you use it might not be obvious for all types what they mean)
-> program output is missing in Output window (it only shows the remedybg output it seems)
-> debugging the sample program, the values for 'i' and 'val' seem to be wrong in the watch window
-> when the source window is open I can't single step in the disassembly anymore (even if i highlight/click into that window)
-> after a while (when trying to single step in disasm after the issue above), hitting F10 and F11 will eventually "resume" the program; control->break will then show an empty disasm window (and eventually freeze remedy)
-> after F11 into a function, hitting F10 the first time (in the source window) makes the yellow arrow vanish (and sometimes frantically jumps around the source window -> try stepping into printf a few layers deep and you should notice it)

features:
-> recent session list
-> keyboard re-binding (specifically I'd love to bind "Control->Break" to a key)
-> automatically open disassembly window when app crash is detected
-> symbol server support (MS symbols...)
-> option for single thread stepping (aka, F10/F11 only resumes the current thread and step there)
-> not sure if bug or feature but: I can't jump between functions in the callstack
-> search functionality in all/source/disasm/watch windows
-> register highlighting (when clicked on/selected) in disasm window
-> option to hide code bytes in diasm
-> disasm window should have an input field where I can write/paste an address and disasm will jump there
-> enable select/copy in (most) windows (e.g. i want to copy the address from the disasm window and paste in the memory window)
-> when entering an address in the mem window, either start the window text at that address (not aligned), or highlight the byte of the address jumped to
-> allow editing in register/watch/memory window
-> (super convenience): "nop" an asm instruction in the disasm window
-> allow to change format/type of register values (int, float, ptr/hex...)
-> in the breakpoint window, allow breakpoints to be deleted with a keyboard key (del) not just the button
-> (super minor): the first column in watch/threads (the one with the yellow arrow) should be fixed size even when expanding/shrinking columns or the window to always fully show the arrow, no less or empty space after
-> resolve variable/function names in the disasm window (where possible)
-> support for pseudo variables in watch windows (e.g.: @TIB)


Everything has been copied to The List. Will prioritize bugs over new features, obviously, but will get these tackled as best I can. Thanks much!

--
George
x13pixels
I'll think about it a bit more but I think you're right and that RemedyBG shouldn't save breakpoints.


I like the breakpoints being saved. In a more general way I like the state being restored when I restart the application. Maybe we could have an option to select what should be stored ?

And for the save dialogue, maybe an option would also be useful:
- If a .rdbg was loaded "Save manually", "Always save", "Ask if there were changes";
- If no .rdbg was loaded "Never save", "Ask to save";

But I haven't done real work with RemedyBG yet, maybe my opinion will change.
x13pixels
Tried using Github's issue tracker and didn't like it much. I've been using a desktop application ToDoList instead. I'll poke around and see if there is an online version of something like this.

Certainly whatever you prefer. I just figured if we the users can't easily see/search the list we'll end up with lots of double posts.

x13pixels
Everything has been copied to The List. Will prioritize bugs over new features, obviously, but will get these tackled as best I can.

Great! I didn't intend the feature requests as must fix ASAP. I just keep adding things to the list as I see them/what keeps me from switching over to RemedyBG as my main (pc) debugger!

ps: I like the BPs being saved too. for a small project it doesn't matter much, but if/when I use RemedyBG at work on a large scale project I definitely need by BP setup to be saved since I often have a bunch of them when debugging something, not necessarily only in code that I'm changing all the time
x13pixels

Tried using Github's issue tracker and didn't like it much. I've been using a desktop application ToDoList instead. I'll poke around and see if there is an online version of something like this.


I've been using AirTable to manage a project and it's been a pleasant experience. It's free too.