RemedyBG 0.1.9.0

Still crunching through the 1975 debugger feature set... However, there are some cool new features in 0.1.9.0, suggested by Casey, that I haven't yet seen elsewhere: specifying relative scope for a variable and being able to lock the scope of a variable in the watch window.

Here is the full change log:

* Full path is now stored in recent session list; fixed a bug when loading session file from the
command line
* Fixed issue in debugger engine where primitive pointer types (e.g., char*) were not being treated
as pointers in certain situations.
* Added string preview for character arrays
* Watch window now respects current frame selected in call stack window. Now draw indicators in
text / disassembly windows of the current frame's location.
* Add newline after exception output
* Fixed slow down of step-over / step-in operations when stepping over the REP/REPE/REPNE class of
instructions.
* Allow specifying frame select prefix for watch expressions (e.g., "{^1}" or "{^*}")
* Can now lock an expression in the watch window to its current scope
* Properly save off and restore maximized state of window
* Added insta-watch tooltips in text windows.

Thanks!

--
George

Edited by x13pixels on Reason: Initial post
Loving the locked scope feature!

I've been trying to use this as a full time replacement of Visual Studio, but there are a few bugs holding me back:

  • Every time I open Remedy, the Memory, Registers and Disassembly window are unchecked. When I start debugging I recheck them and they reappear where I expect them to be. This happens with the default layout and a customized one.
  • When I manually open a source file in my project I'm unable to set active breakpoints. I get the red icon with a question mark. The only way I can break into a file is to start the debugger, break and then walk through the code until I jump into said file. Now I can set breakpoints in that particular file, even after restarting Remedy. This is a major pain since I'm working in a ~50k line codebase and it's slow to navigate around this way.
  • This one is quite mysterious: the watch window is unable to find every identifier that's in scope. I haven't found a pattern yet - it doesn't matter if it's static, extern, a pointer, of some specific type, etc...it seems random but it's consistent across restarts and compilations so there must be some pattern. My PDB is loading successfully according to the Modules tab. Also if I step into a function that takes one of these missing identifiers then I can inspect the passed in values. Here are some screenshots showing this. I'll try to replicate it with a demo project. In the meantime let me know if there's any other info I can provide.


Suggestion

  • Both Control and Session menus have a Start Debugging but only Session shows a Stop Debugging. It would be useful if Control also had the stop action and maybe the restart as well. I keep looking for these there since I'm using the Control menu to initiate debugging (I really ought to memorize all of the keyboard shortcuts :P).


Cheers
Thanks for the feedback Michael!

michael

  • Every time I open Remedy, the Memory, Registers and Disassembly window are unchecked. When I start debugging I recheck them and they reappear where I expect them to be. This happens with the default layout and a customized one.



  • Noted. I'll make sure this gets fixed.

    michael

  • When I manually open a source file in my project I'm unable to set active breakpoints. I get the red icon with a question mark. The only way I can break into a file is to start the debugger, break and then walk through the code until I jump into said file. Now I can set breakpoints in that particular file, even after restarting Remedy. This is a major pain since I'm working in a ~50k line codebase and it's slow to navigate around this way.


  • I believe I know why this is happening. I plan on using the hash of the file stored in the PDB rather than filenames to help address this.

    michael

  • This one is quite mysterious: the watch window is unable to find every identifier that's in scope. I haven't found a pattern yet - it doesn't matter if it's static, extern, a pointer, of some specific type, etc...it seems random but it's consistent across restarts and compilations so there must be some pattern. My PDB is loading successfully according to the Modules tab. Also if I step into a function that takes one of these missing identifiers then I can inspect the passed in values. Here are some screenshots showing this. I'll try to replicate it with a demo project. In the meantime let me know if there's any other info I can provide.


  • Can you send me the switches you are using for compiling the program? We've seen some issues between using /Zi and using /Z7. See if changing to /Z7 helps. If not a demo project would be very helpful.

    michael

    • Both Control and Session menus have a Start Debugging but only Session shows a Stop Debugging. It would be useful if Control also had the stop action and maybe the restart as well. I keep looking for these there since I'm using the Control menu to initiate debugging (I really ought to memorize all of the keyboard shortcuts :P).


    Not a problem. I can add that.

    Thanks again!

    --
    George

    Edited by x13pixels on Reason: formatting issue with quotes
    michael

    This one is quite mysterious: the watch window is unable to find every identifier that's in scope. I haven't found a pattern yet - it doesn't matter if it's static, extern, a pointer, of some specific type, etc...it seems random but it's consistent across restarts and compilations so there must be some pattern. My PDB is loading successfully according to the Modules tab. Also if I step into a function that takes one of these missing identifiers then I can inspect the passed in values. Here are some screenshots showing this. I'll try to replicate it with a demo project. In the meantime let me know if there's any other info I can provide.[/li]


    I took a look at your screen shots and it gave me an idea about what might be causing this. Don't worry about sending a repo case for this. Thank you.

    --
    George
    Thanks for the quick followup, George. Appreciate it.

    Can you send me the switches you are using for compiling the program? We've seen some issues between using /Zi and using /Z7. See if changing to /Z7 helps.


    FWIW I've only been using /Z7 with this project. Here are my switches:

    1
    /MTd /Z7 /Od /TP /fp:fast /EHa- /GS /GR- /Oi /WX /W4 /FC /Gw /Gy /WL /Gm-
    


    And for release builds I replace /MTd with /MT and /Od with /O2.

    Cheers
    Hey George,

    Just following up to see if you've made any headway on the bug that causes some variables to not be found in the watch window. I just tried out 0.2.2.1 and I'm still seeing the bug. Is there an existing issue on Github? If not, I can submit one for you :)

    Cheers
    michael


    Just following up to see if you've made any headway on the bug that causes some variables to not be found in the watch window. I just tried out 0.2.2.1 and I'm still seeing the bug. Is there an existing issue on Github? If not, I can submit one for you :)



    I thought I had that one licked. Please submit a new issue when you get a chance and I'll be happy to take another look. Thanks Michael.

    --
    George