TickShifter v0.2

As I mentioned a while back, I’ve been working on adding rudimentary GUIs to my debugging and testing tools. In fact, both the deadlock detection tool and the time shifting tool are both functional enough for real world use but the command line interfaces make them harder to use than they need to be. I’m not yet 100% sure of the form that the final GUI should take, but I’ve pressed on with my initial GUI development to produce a reasonably complete GUI for the cut down, demonstration tool, TickShifter.

The GUI version of the tool accepts the same command line arguments as the console mode version that I wrote about here. It also accepts an additional argument of -launch which, when used with -exe will cause the target process to be started automatically. Without -launch the command line arguments simply allow you to “automatically fill in” some of the required input data.

The GUI is fairly simple.


Simply browse for, or type in, a target process, select how you want to adjust the results of its calls to GetTickCount() and hit the “Launch” button.


Once you’re running a process under the tool you’ll see the “session” listed in the sessions list. A session is a collection of data from one or more processes under test. Each time you hit the “Launch” button you create a new session. Viewing the session data shows you the processes that were monitored during the session. If the process that you launched didn’t launch any child processes then this dialog will simply list one process. The multiple-process support isn’t especially useful for the simple TickShifter tool (but then it is just a minimal example of how the tools work!), it’s much more useful for the Deadlock detection tool as it allows deadlock detection to operate on named kernel objects across processes rather than simply within a single process.


From the session display you can navigate to each individual process. The TickShifter GUI simply displays all of the calls that the process has made to GetTickCount() more complex tools might show a tab for each lock that’s accessed by the process, another tab for each thread, another showing the overall ordering of lock access within the process, etc. The number next to each entry is the location that the call occurred at. Clicking on the location takes you to a call stack display.


And that’s about it. If you come across buttons that never become enabled that’s because the code isn’t finished. Likewise the “namespace” removal stuff doesn’t yet work; once it does it will allow you to make the call stack display easier to read by being able to specify namespaces that you’d like stripped from function names.

I quite expect that this will fail to work on your machine, but I’d like to know if it does so that I can fix it! Comments and suggestions welcome, as always.

TickShifter v0.2 can be downloaded from here (x86) and here (x64) (If you want to run ON an x64 platform you can use either build but the build should match the build of the target process). You can use the sample projects that I provided with v0.1 to see it in action.