Help us understand the problem. What is going on with this article?

mac OS 10.13(High Sierra) で gdb を使う

More than 1 year has passed since last update.

mac OS 10.13(High Sierra) で gdb を使おうとした際にハマったのでメモ。

gcc のバージョン

Xcode インストール時にインストールされていたっぽい。

$ gcc -v
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 9.0.0 (clang-900.0.39.2)
Target: x86_64-apple-darwin17.3.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

Homebrew のインストール

gdb をインストールするために Homebrew をインストールする。

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

インストール後にバージョンを確認する。

$ brew -v
Homebrew 1.4.2

gdb のインストール

$ brew install gdb

インストール後にバージョンを確認する。

$ gdb -v
GNU gdb (GDB) 8.0.1
Copyright (C) 2017 Free Software Foundation, Inc.
...

テストプログラムの作成

gdb の動作確認用に以下のようなテストプログラムを作成する。

test.c
#include <stdio.h>

int main(void) {
    printf("test\n");
    return 0;
}

test.c をビルドする。

$ gcc -g test.c -o test

ここで実行してみる。

$ gdb ./test
GNU gdb (GDB) 8.0.1
Copyright (C) 2017 Free Software Foundation, Inc.
...

(gdb) b main
Breakpoint 1 at 0x100000f64
(gdb) run
Starting program: (プログラムのパス) 
Unable to find Mach task port for process-id xxxx: (os/kern) failure (0x5).
 (please check gdb is codesigned - see taskgated(8))

コード署名をしてくださいというエラーが出ている。

gdbコード署名用の証明書の作成

キーチェーンアクセス メニューから、gdbのコード署名用の証明書を作成する。

こちらの情報を参考にさせていただきました。
https://qiita.com/takahashim/items/204ffa698afe09bd4e28

  1. Launchpad -> その他 -> キーチェーンアクセス を起動する。
  2. キーチェーンアクセス -> 証明書アシスタント -> 証明書を作成... を選択する。
  3. 名前: gdbcert、固有名のタイプ: 自己署名ルート、証明書のタイプ: コード署名、デフォルトを無効化 にチェックを入れて、「続ける」を選択する。
  4. 有効期間(日数): 3650 などにして「続ける」を選択する。
  5. 「証明書を保管するキーチェーンを指定してください。」メニューまではデフォルトの状態で「続ける」を選択する。
  6. 「証明書を保管するキーチェーンを指定してください。」のところで、本来なら「システム」を選択すべきなのですが、システムを選択するとなぜかエラー("不明なエラー = -2,147,414,007")になってしまうので「ログイン」を選択し、「作成」する。
    参考: https://apple.stackexchange.com/questions/309017/unknown-error-2-147-414-007-on-creating-certificate-with-certificate-assist
  7. 「ログイン」キーチェーンに gdbcert 証明書が作成されているので、ドラッグアンドドロップで、「システム」キーチェーンに移動させる。
  8. gdbcert を右クリックして「情報を見る」メニューを選択する。
  9. > 信頼 の中の「この証明書を使用するとき」のリストボックスで「常に信頼」を選択する。
  10. キーチェーンアクセス メニューを終了する。
  11. PCを再起動する。(taskgatedを再起動する)

gdb のコード署名

以下のコマンドを実行して gdb のコード署名を行う。

$ codesign -s gdbcert /usr/local/bin/gdb

gdb の実行

先ほどエラーになっていたテストプログラムを再度実行してみる。

$ gdb ./test
GNU gdb (GDB) 8.0.1
Copyright (C) 2017 Free Software Foundation, Inc.
...

(gdb) b main
Breakpoint 1 at 0x100000f6f: file test.c, line 4.
(gdb) run
Starting program: (プログラムのパス) 
[New Thread 0x1703 of process 7926]
warning: unhandled dyld version (15)

Thread 2 hit Breakpoint 1, main () at test.c:4
4       printf("test\n");
(gdb) s
test
5   }
(gdb) s
[Inferior 1 (process 7926) exited normally]
(gdb) quit

無事実行できた:slight_smile:
ターミナルからの実行はできるようになったが、Eclipse CDT からのデバッグでさらにハマったので別途書く予定。

[追記] 書きました。

参考

yuzu_afro
Twitterはこちら https://twitter.com/yuzu_afro
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした