5

2つの関数がfunc1ありfunc2、それぞれにブレークポイントが設定されています。

func2前のブレークポイントヒットがあった場合に、GDBをブレークポイントで停止させることは可能func1ですか?

4

2 に答える 2

2

これを行う最良の方法は、ブレークポイントでコマンドを使用することです。

2つのブレークポイントに到達したときに、特定のコマンド(カウンターのインクリメントなど)を実行するようにGDBに指示できます。これらの変数/フラグの数に基づいて、実行が条件付きで停止されます。

このリンクでこの情報を見つけました。詳細については、同じものを参照してください。記事は適切な例で非常によく書かれています。お役に立てれば。

于 2012-09-09T19:51:28.140 に答える
0

一方のブレークポイントにもう一方のブレークポイントを設定させます。definegdb spaghettiを使用して関数を作成することを避けるために、を使用することをお勧めします。

main.cpp

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 に答える