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 の動作確認用に以下のようなテストプログラムを作成する。
#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
- Launchpad -> その他 -> キーチェーンアクセス を起動する。
- キーチェーンアクセス -> 証明書アシスタント -> 証明書を作成... を選択する。
- 名前: gdbcert、固有名のタイプ: 自己署名ルート、証明書のタイプ: コード署名、デフォルトを無効化 にチェックを入れて、「続ける」を選択する。
- 有効期間(日数): 3650 などにして「続ける」を選択する。
- 「証明書を保管するキーチェーンを指定してください。」メニューまではデフォルトの状態で「続ける」を選択する。
- 「証明書を保管するキーチェーンを指定してください。」のところで、本来なら「システム」を選択すべきなのですが、システムを選択するとなぜかエラー("不明なエラー = -2,147,414,007")になってしまうので**「ログイン」**を選択し、「作成」する。
参考: https://apple.stackexchange.com/questions/309017/unknown-error-2-147-414-007-on-creating-certificate-with-certificate-assist - 「ログイン」キーチェーンに gdbcert 証明書が作成されているので、ドラッグアンドドロップで、「システム」キーチェーンに移動させる。
- gdbcert を右クリックして「情報を見る」メニューを選択する。
-
信頼 の中の「この証明書を使用するとき」のリストボックスで「常に信頼」を選択する。
- キーチェーンアクセス メニューを終了する。
- 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
無事実行できた
ターミナルからの実行はできるようになったが、Eclipse CDT からのデバッグでさらにハマったので別途書く予定。
[追記] 書きました。
- mac OS 10.13(High Sierra) で Eclipse のデバッグに gdb を使う
https://qiita.com/yuzu_afro/items/17111ff1655116aa0a96
参考
-
[OS XでGDBを使う(ためにコード署名をする)]
(https://qiita.com/takahashim/items/204ffa698afe09bd4e28) -
[Unknown Error = -2,147,414,007” on creating certificate with Certificate Assistant]
(https://apple.stackexchange.com/questions/309017/unknown-error-2-147-414-007-on-creating-certificate-with-certificate-assist)