5

我有两个函数,func1并且func2,每个函数都有一个断点集。

func2如果前一个断点命中是,是否可以让 GDB 在断点处停止func1

4

2 回答 2

2

最好的方法是在断点中使用命令。

当命中两个断点时,您可以指示 GDB 执行某些命令(例如,递增计数器)。根据这些变量/标志的计数有条件地停止执行。

我在这个链接上找到了这个信息。详情请参阅相同内容。这篇文章写得很好,有适当的例子。希望这可以帮助。

于 2012-09-09T19:51:28.140 回答
0

让一个断点设置另一个断点。为避免 gdb spaghetti 使用define创建函数,建议使用。

主文件

int c1=0, c2=0;

void func1(){
    c1++;
}

void func2(){
    c2++;
}

int main(){

    // we shouldn't see a breakpoint here
    for(int i=0; i < 5; i++)
        func1();

    func2();

    // get a breakpoint
    func1();

    return 0;
}

编译并运行 gdb

clang++ main.cpp -o main.exe -g
gdb --args ./main.exe

gdb 命令

break func2
commands
    break func1
    # run a few commands when we hit func1()
    commands
    print c1
    backtrace
    end
    # continue to func1() breakpoint
    continue
end
run
于 2021-10-21T07:10:04.443 回答