LoginSignup
27

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-01-04

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

[追記] 書きました。

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27