トップページへ

gdbを一時停止/強制停止させる方法

小粋空間 » Programming Language » C/C++ » gdbを一時停止/強制停止させる方法

gdbを一時停止/強制停止させる方法を紹介します。

1.問題点

次のサンプルプログラムを作りました。

test.cpp

#include <iostream>
#include <unistd.h>
 
int main() {
    int i;
    int j = 0;
    for (i = 0; i < 10000; i++ ) {
        std::cout << "OK" << std::endl;
        sleep(1);
        j++;
    }
    return 0;
}

このプログラムをgdbで実行させたあと、プログラムを一旦停止させてからブレークポイントを設定したいのですが、方法が分かりません。

ということで、gdbを一時停止/強制停止させる方法を紹介します。

2.gdbを一時停止/強制停止させる

gdbを一時停止/強制停止させるには、"Ctrl-c"を利用します。

gdbでプロセスが動作しているときに"Ctrl-c"を入力すると、制御がgdbに移るので、この状態でブレークポイントを設定することができます。

前述のサンプルでの手順を下記に示します。

まずビルドします。

# g++ -g test.cpp

gdbでプログラムを起動します。

# gdb ./a.out
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-94.el7
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "ppc64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/foo/a.out...done.

実行します。

(gdb) run
Starting program: /home/foo/./a.out
OK
OK
OK

ここでCtrl-cを入力します。

^C
Program received signal SIGINT, Interrupt.
0x00003fffb7b74dc8 in __nanosleep_nocancel () from /lib64/libc.so.6
Missing separate debuginfos, use: debuginfo-install glibc-2.17-157.el7.ppc64 libgcc-4.8.5-11.el7.ppc64 libstdc++-4.8.5-11.el7.ppc64

プロセスが停止してgdbに制御が戻ってプロンプトが表示されるので、ブレークポイントを設定します。

(gdb) break test.cpp:10
Breakpoint 1 at 0x100009e0: file test.cpp, line 10.

再開させるには"continue"を入力。

(gdb) continue
Continuing.
 
Breakpoint 1, main () at test.cpp:10
10              j++;

ブレークポイントで停止したのでjの値を表示させます。

(gdb) print j
$1 = 2

« 前の記事へ

次の記事へ »

トップページへ