• gdb exe control


    Finish And Until
        'finish' lets the current function execute until it finishes.
        'until <source line> makes gdb continue program execution until the given line is reached.
        Note: 'until' can only be executed if the program already

    return
        Sometimes we want a function to terminate prematurely during a debugging session.
        For example:
                A function computes a variable's value wrongly.
                We found this, but still want to debug the rest of the program.
                we can force the function to return immediately with the correct value:
        return 59

    Conditional Break-Points

        Let us suppose we have a long loop, and we want to start debugging only at the 503rd iteration.
        We do this using conditional break-points:

        Breakpoint 1, func_long_calc (i=5000) at c1.c:5
        5        int j = 5;
        (gdb) list 8,10
        8        for (plastic = 0; plastic < i; ++plastic) {
        9            j += plastic;
        10        }
        (gdb) break 9 if plastic == 503
        Breakpoint 4 at 0x804835a: file c1.c, line 9.
        (gdb) cont
        Continuing.

        Breakpoint 4, func_long_calc (i=5000) at c1.c:9
        9            j += plastic;
        (gdb) print plastic
        $1 = 503

    Other Break-Point Commands

      表达式匹配断点
        'rbreak <regular expression>' sets break-points for all functions whose name matches the regular expression.
        'disable <number>' disables (but does not delete) the given break-point.
        'enable <number>' re-enables the given (previously disabled) break-point.

      临时断点
        'tbreak' sets a temporary break-point - once it is hit, it is deleted.

    监测点
    Watch-Points
        定义
        A watch-point makes the program stop when an expression is true, regardless of the function in which it happens.
            例1
        A basic example: 'watch a == 1' makes the program stop when variable 'a' has the value... '1'.
            例2
        Checking when my memory gets over-written with a zero byte:
        watch *(char*)0x65476 == 0
        查看
        Watch-points and other break-points are all seen using 'info break' or 'info watch'.
            删除
        use 'delete <watch-point number>' to delete a watch-point, just like with a break-point.

    Hardware Vs. Software Watch-Points
        By default, gdb attempts to use hardware-assisted break-points.
        These get processed using the hardware, and have a lesser impact on program speed...
        ...relative to software watch-points.
        There are a few other caveats to watch-points regarding multi-threaded programs - we'll see them later.

    I Want To Do This - Again!
        You can ask gdb to save a "checkpoint": (恢复点)
        checkpoint

    reference: http://www.haifux.org/lectures/210/index.html

    more time!



        After stepping forward and finding you've gone further then you wanted, switch back to the checkpoint:
        restart <checkpoint id>    (返回恢复点)

        To see the list of active check-points:
        info checkpoints (查看恢复点)

        What a checkpoint does: forks off a copy of the program, so gdb will be able to switch back to it later on.
        To delete checkpoints:
        delete checkpoint <checkpoint id> (删除恢复点)

  • 相关阅读:
    [POJ 1050]To the Max
    P1678 烦恼的高考志愿
    P1873 砍树
    P1102 A-B 数对
    P6771 [USACO05MAR]Space Elevator 太空电梯
    P2347 砝码称重
    P1832 A+B Problem(再升级)
    P1679 神奇的四次方数
    P1877 [HAOI2012]音量调节
    P1049 装箱问题
  • 原文地址:https://www.cnblogs.com/kwingmei/p/3224530.html
Copyright © 2020-2023  润新知