Edited at

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 からのデバッグでさらにハマったので別途書く予定。

[追記] 書きました。


参考