How to break when a specific exception type is thrown in GDB?

后端 未结 9 1173
迷失自我
迷失自我 2020-12-02 07:40

According to the documentation I can break on specific exception type by using conditional breakpoints. However the syntax for the condition isn\'t very clear to me:

9条回答
  •  渐次进展
    2020-12-02 08:21

    From what I have understood from the question here, you want to break when a specific exception boost::bad_function_call is thrown in your application.

    $> gdb /path/to/binary
    (gdb) break boost::bad_function_call::bad_function_call()
    (gdb) run --some-cli-options
    

    So when the temporary object boost::bad_function_call is constructed in preparation for the throw; gdb will break out!

    I have tested this and it does work. If you precisely know the way the exception object is being constructed then you can set breakpoint on the specific constructor, otherwise as shown in the example below, you can omit the arguments prototype list, and gdb will set break points on all different flavours of the constructor.

    $ gdb /path/to/binary
    
    (gdb) break boost::bad_function_call::bad_function_call
    Breakpoint 1 at 0x850f7bf: boost::bad_function_call::bad_function_call. (4 locations)
    
    (gdb) info breakpoints
    Num     Type           Disp Enb Address    What
    1       breakpoint     keep y   
    1.1                         y     0x0850f7bf in boost::bad_function_call::bad_function_call() at /usr/include/boost/function/function_base.hpp:742
    1.2                         y     0x0850fdd5 in boost::bad_function_call::bad_function_call(boost::bad_function_call const&) at /usr/include/boost/function/function_base.hpp:739
    1.3                         y     0x0863b7d2 
    1.4                         y     0x086490ee 
    

提交回复
热议问题