> Markdown version of [/videos/470-talk-to-the-duck-secrets-of-the-debugging-masters?t=1222](https://www.wearedevelopers.com/videos/470-talk-to-the-duck-secrets-of-the-debugging-masters?t=1222). Every page supports `.md` or `Accept: text/markdown`. Links point to the HTML versions so they work for humans too. Agent guide: [/agents.md](https://www.wearedevelopers.com/agents.md). --- # Talk to the Duck - Secrets of the Debugging Masters Still relying on static print statements? Master advanced IDE capabilities to rewind execution, log dynamically, and track memory leaks in real time without ever recompiling. - **Speakers:** Shai Almog - **Event:** World Congress 2022 - **Published:** June 15, 2022 - **Duration:** 28:52 - **URL:** https://www.wearedevelopers.com/videos/470-talk-to-the-duck-secrets-of-the-debugging-masters ## Summary Debugging is often a humbling experience that exposes our mistakes, but mastering advanced IDE features can transform it from a frustrating chore into a high-powered workflow. Instead of relying on static print statements, developers can leverage deep capabilities—specifically within tools like IntelliJ IDEA—to manipulate execution, log dynamically, and inspect complex native states without ever needing to recompile. Embracing this "debugging yoga" shifts the focus away from basic step-throughs and toward interactive, real-time code analysis. Groundbreaking developer tools allow engineers to completely control the flow of execution, such as using "Jump to Line" to move the instruction pointer backward and rerun failed methods dynamically without dropping the session. For non-intrusive inspection, developers can utilize tracepoints for real-time execution logging, wildcard method breakpoints to instantly hook into entire packages (like database drivers), and exception breakpoints paired with class filters to bypass internal JVM noise. The watch area also serves as a debugging powerhouse: users can expose hidden return values, use custom renderers (or `@Renderer` annotations) to execute dynamic SQL counts against JPA repositories, and leverage object marking to save and compare variables like thread pointers directly in memory. Beyond standard execution flow, advanced tools can unravel notoriously challenging logic. Developers can use the stream debugger to visualize reactive, functional steps, or track memory leaks by isolating instance allocations and stack traces strictly between two unique breakpoints. When code inevitably reaches production, traditional remote debugging introduces unacceptable security and stability risks—essentially handing hackers the keys to the server. To solve this, engineering teams can transition to developer observability tools that allow them to securely inject logs, capture non-breaking snapshots, and gather dynamic performance metrics in a completely sandboxed environment without risking downtime or needing process restarts. **Keywords:** advanced debugging techniques, intellij idea debugging, dynamic execution manipulation, non-suspending tracepoints, wildcard method breakpoints, exception breakpoint filtering, custom object rendering, JPA repository debugging, dynamic variable marking, java stream debugging, JVM memory tracking, instance allocation profiling, developer observability, secure production debugging, non-breaking snapshots, dynamic code metrics ## Chapters 1. **Adopting a humble mindset for effective debugging** (00:05) — Viewing debugging as a humbling practice helps developers overcome frustration and ego when finding bugs. 1. **Moving the instruction pointer to re-execute code** (03:32) — Dragging the execution line backward allows developers to retry logic dynamically without restarting the application. 1. **Using trace points for dynamic log generation** (05:29) — Converting regular breakpoints into trace points enables dynamic log evaluation without stopping the program. 1. **Applying wildcard associations to method breakpoints** (06:37) — Using wildcard packages or names enables breaking on multiple related methods simultaneously for comprehensive debugging. 1. **Filtering exception breakpoints to reduce internal stops** (08:49) — Adding class filters for standard libraries prevents the debugger from stopping on internally caught exceptions. 1. **Displaying method return values in the watch area** (10:02) — Enabling return value display ensures method outcomes remain visible in the watch area after stepping out. 1. **Tracking objects dynamically with in-memory object marking** (11:04) — Creating global marker references allows automated comparisons between objects and enables deep virtual machine introspection. 1. **Debugging reactive sequences with the stream debugger** (13:55) — Breaking down functional syntax into columns visualizes exact mappings and transformations in reactive processing steps. 1. **Customizing watch area rendering with code annotations** (15:28) — Defining custom object renderers executes database queries directly within the ui to reveal internal representations seamlessly. 1. **Analyzing object allocation with new instance tracking** (20:22) — Tracking newly instantiated objects between execution steps isolates memory allocations to pinpoint memory leaks efficiently. 1. **Replacing remote debugging with secure developer observability** (22:01) — Injecting dynamic logs and non-breaking snapshots directly into production clusters eliminates the security risks of remote debugging. ## Related Moments - [Tooling challenges with debugging, logging, and IDEs](https://www.wearedevelopers.com/videos/100338-native-speed-java-comfort-calling-rust-from-the-jvm-with-project-panama) (from "Native Speed, Java Comfort: Calling Rust from the JVM with Project Panama") - [Utilizing the JVM tool interface for dynamic code changes](https://www.wearedevelopers.com/videos/100321-swapping-code-losing-memory-a-jvm-deep-dive) (from "Swapping Code, Losing Memory: A JVM Deep Dive") - [Exploring the high-level Java platform debugging architecture](https://www.wearedevelopers.com/videos/846-debugging-unveiled-exploring-debugger-internals-and-hidden-gems) (from "Debugging Unveiled: Exploring Debugger Internals and Hidden Gems") - [Compiling and configuring the OpenJDK for direct debugging](https://www.wearedevelopers.com/videos/100321-swapping-code-losing-memory-a-jvm-deep-dive) (from "Swapping Code, Losing Memory: A JVM Deep Dive") - [Cultivating community and powering learning for developers](https://www.wearedevelopers.com/videos/1390-the-future-of-stack-overflow-as-the-most-vital-source-for-technologists) (from "The future of Stack Overflow as the most vital source for technologists") - [Debugging challenges inside closed source cloud native environments](https://www.wearedevelopers.com/videos/797-cloud-as-the-new-mainframe-why-the-cloud-hype-does-not-reflect-the-dev-reality) (from "Cloud as the new mainframe: why the cloud hype does not reflect the dev reality") ## Related Articles - [AI-Powered Debugging: The Future of Fixing Your Code](https://www.wearedevelopers.com/magazine/553-ai-powered-debugging-the-future-of-fixing-your-code) - [Liuba Gonta and Yuliya Khadasevic - GitHub Copilot Beyond the Basics - 10 Ways to Elevate Your Coding](https://www.wearedevelopers.com/magazine/490-liuba-gonta-and-yuliya-khadasevic-github-copilot-beyond-the-basics-10-ways-to-elevate-your-coding) - [Dev Digest 112 - The True Crime of AI Development](https://www.wearedevelopers.com/magazine/421-dev-digest-112-the-true-crime-of-ai-development) - [Dev Digest 130 - The Diablo is in the details](https://www.wearedevelopers.com/magazine/470-dev-digest-130-the-diablo-is-in-the-details) ## Related Jobs - [Staff Developer Advocate, GitHub Security Lab](https://www.wearedevelopers.com/jobs/ext/1921051-staff-developer-advocate-github-security-lab) at **GitHub** - [Engineer, Offensive Security Organization](https://www.wearedevelopers.com/jobs/ext/1992296-engineer-offensive-security-organization) at **Twilio** - [Tribe Lead - ( Software) Engineering Centre of Excllence](https://www.wearedevelopers.com/jobs/ext/1475530-tribe-lead-software-engineering-centre-of-excllence) at **SD Worx** - [Senior Software Engineer](https://www.wearedevelopers.com/jobs/ext/15942-senior-software-engineer) at **GitHub** - [Lead Software Engineer - Data Engineering](https://www.wearedevelopers.com/jobs/ext/2000968-lead-software-engineer-data-engineering) at **Dynatrace** - [Principal Software Engineer, Database Infrastructure](https://www.wearedevelopers.com/jobs/ext/1465908-principal-software-engineer-database-infrastructure) at **GitHub**