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

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

Posted at November 15,2017 12:03 AM
Tag:[C/C++]

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
関連記事
zenback
人気エントリー
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)