All posts by Ivan Shcherbakov

Introducing SourceVu

Have you ever opened an old project that used to work just fine, only to find out that you can’t build it anymore because it relies on some pieces that got removed from the latest SDK? Ever tried to understand code in a text editor without full context? Where searching for “Status” can give you 20 different definitions, and good luck figuring out which exact one is referenced right here?

I used to run into these problems all the time and I know the pain.  So that’s why today we are introducing SourceVu – a browser-based source navigation system that can make a snapshot of your project, capturing references, call trees, instances of all the classes and structs, and let you revisit it later, with full IDE-like navigation.

It now contains pre-indexed versions of two popular embedded frameworks – STM32 SDKs and the Raspberry Pi Pico SDK. Want to find all samples using HAL_UART_Transmit_IT()? One click, and you are there. Want to quickly look up what dhcp_discover() is supposed to do, with a bird’s eye view of the call tree and variables it modifies? Another click and here you go.

SourceVu integration is coming into future versions of VisualGDB, with support for running your own servers and exporting your projects into archives that can be viewed at any time with nothing else than just a browser.

VisualGDB 6.0 is out of Beta

Today we are happy to announce the stable release of VisualGDB 6.0. If you haven’t tried the Beta releases yet, the biggest feature to check out would be the new Tracing Engine.

It allows placing tracepoints anywhere in the embedded code that will record the data you selected, with minimal disruptions to the program flow:Tracepoints run directly on the target and store the collected data in a circular buffer inside the device’s memory, so they are not affected by JTAG latency, and generally run very fast.

You can step through the recorded events while the program is still running, or save them into a report file, and review it later:Tracing makes it easy to debug real-time code where stopping the target even for a few milliseconds is not acceptable. Think logging USB requests, recording DMA state at different stages of signal generation, storing every sample coming from an ADC, logging every thread switch, etc.

You can find various tutorials on software tracing here, and more are on the way!

If you have already tried the Betas, the final 6.0 release brings numerous usability improvements to tracing: you can now format pointers values as [nearest symbol  + offset], record void * variables as dynamically-sized byte arrays, properly format IP addresses, dump multiple trace events into easy-to-read text files, or convert the trace reports into a machine-readable XML format.

Other v6.0 changes include a newer IntelliSense engine based on Clang 16.0, full support for ARM64 hosts (e.g. Macbook), Unlimited FLASH breakpoints on STM32 with OpenOCD, and numerous other fixes and usability improvements.

Try it out

You can download VisualGDB 6.0 here or use the VisualGDB Package Manager to update from an older version. If you have any questions or suggestions about the new release, do not hesitate to reach out to us.

VisualGDB 6.0 – Live Tracing for Embedded Targets

One of the toughest things about debugging embedded systems is that setting a breakpoint isn’t always an option. Sometimes, you don’t know where exactly the problem is until everything crashes. Sometimes, you cannot pause your device for a couple of seconds because it’s continuously talking to other parts of the system. Even if you can, good luck finding that inconsistency among 100 USB packets handled by your device within the past second.

VisualGDB 6.0 fixes this once and for all with the new software-based Live Tracing – a mechanism for setting tracepoints and recording what exactly the application is doing without having to stop it: Continue reading VisualGDB 6.0 – Live Tracing for Embedded Targets

Introducing Advanced Linux Kernel Tracing

Today we are proudly releasing VisualKernel 4.0 that introduces a huge usability improvement to kernel debugging workflows.

The Achilles’ heel of kernel debugging is trying to make sense of a complex live system running many operations simultaneously. Breakpoints and stepping provide some insights, but having the entire system stopped in the debugger often has side effects and breaks unexpected things.

VisualKernel 4.0 fixes this with Live Tracing – a new mechanism that allows quickly capturing, recording and reviewing arbitrary data at any point in time that could be interesting: Continue reading Introducing Advanced Linux Kernel Tracing

Introducing Code Explorer

One of the major design goals of VisualGDB is to help our users easily navigate large C/C++ code bases. This is possible due to our heavily optimized Clang-based IntelliSense engine, that can replace the regular VC++ IntelliSense for VisualGDB projects. It uses multiple threads to fully analyze the entire codebase and build a detailed map of your classes, functions, methods, and relations between them. This has enabled features like CodeJumps and integration with Visual Studio’s Code Map.

VisualGDB 5.6 introduces another feature that will save you time dealing with large projects: Code Explorer. And in this post I will give you a tour of its main highlights. Continue reading Introducing Code Explorer