Optimizing C++ Exception Debugging with GDB: Effective Strategies for Troubleshooting

Fracis
3 min readJan 3, 2024

1. Identify Debugging Issues

In a large project, exceptions may be thrown in various places, and when encountering crashes or exceptions, it’s crucial to address two main issues:

  1. Exception Source: Determine where the exception is thrown.
  2. Exception Handling: Identify where the exception is caught.

Exceptions can be triggered by custom code or thrown by underlying libraries, making it challenging to pinpoint the exact location.

Fortunately, GDB provides two essential commands for handling these situations:

  • To catch exceptions thrown: catch throw
  • To catch exceptions caught: catch catch

These commands help analyze the stack trace and quickly identify the problematic code.

In addition to these commands, the help catch command can be used to list all available options:

catch assert -- Catch failed Ada assertions, when raised.
catch catch -- Catch an exception, when caught.
catch exception -- Catch Ada exceptions, when raised.
catch exec -- Catch calls to exec.
catch fork -- Catch calls to fork.
catch handlers -- Catch Ada exceptions, when handled.
catch load -- Catch loads of shared libraries.
catch rethrow -- Catch an exception, when rethrown.
catch signal -- Catch signals by their names and/or numbers.
catch syscall -- Catch…

--

--

Fracis

Stories About C Plus Plus,Arrow and DuckDB contributor