Hatena::ブログ(Diary)

旅日記

2012-03-24

引っ越します

02:13

id 名をよくタイポしたりされたりしたので、見た目も良さげなはてなブログに引っ越します。http://tetsuok.hatenablog.com/

2011-12-23

OS X Lion で新しい gdb が動くようになったみたいなんですよ

| 00:57

師走です。今年の反省点の一つとして、プログラムのデバッグに対する一層の鍛錬が必要だと思い知らされました。ここで言うバグとは単にコンパイルが通らないというものだけでなく、メモリリークや結果の再現ができないなども含めてバグと考えています。デバッガをうまく使って鼻歌交じりにバグを取ることができていれば、最終バスを何度も逃すこともなく、毎晩夜遅くまでディスプレイと睨めっこすることもなかったかもしれません。

さて、今日が何の日かは知りつつも メーリングリスト経由で、開発版の gdb が OS X Lion で動くようになったらしいということを知ったのでメモしておきます。gdb を使わない人、Xcode をインストールしたときに一緒についてくる gdb 6.3.x で満足している人には無関係な話題です。まだ完全には Lion に対応できていないようですが、開発版の gdb 7.4 用のブランチで OS X Lion 用の修正が入っているようです(参考)。なお、開発版に関する情報なので、言うまでもなく一週間後には状況が変わっているかもしれませんので、内容の正確性については保証できかねます。予めご了承ください。

手元の環境は以下の通り。

$ uname -a
Darwin shouga 11.2.0 Darwin Kernel Version 11.2.0: Tue Aug  9 20:54:00 PDT 2011; root:xnu-1699.24.8~1/RELEASE_X86_64 x86_64
$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.7.2
BuildVersion:   11C74

コードを入手する

cvs -d :pserver:anoncvs@sourceware.org:/cvs/src co -r gdb_7_4-branch gdb

後は ./configure && make 。もしコンパイルがこけたら、"version.h" に関するエラーかもしれません。

Index: python.c
===================================================================
RCS file: /cvs/src/src/gdb/python/python.c,v
retrieving revision 1.79.2.1
diff -r1.79.2.1 python.c
35c35
< 
---
> #include "../version.h"

詳しくは http://sourceware.org/gdb/ を参照またはメーリングリストを検索してみてください。

GDB に権利を

なんとかコンパイルが通り一件落着、いざ使おうと思っても、そうは問屋が卸しません。こちら に書いてあるように、kernel にとってデバッガに好き勝手にプロセスをコントロールされるとセキュリティ的によろしくありません。実際、自前でビルドした gdb を一般ユーザで実行すると怒られてしまいます:

$ ls
a.out*      a.out.dSYM/ test.cc
$ ~/local/src/gdb_7_4-branch/gdb/gdb ./a.out
GNU gdb (GDB) 7.3.91.20111223-cvs
Copyright (C) 2011 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 "x86_64-apple-darwin11.2.0".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /Users/tetsuo-s/cpp-programs/a.out...Reading symbols from /Users/tetsuo-s/cpp-programs/a.out.dSYM/Contents/Resources/DWARF/a.out...done.
done.
(gdb) start
Temporary breakpoint 1 at 0x100000fa6: file test.cc, line 8.
Starting program: /Users/tetsuo-s/cpp-programs/a.out 
Unable to find Mach task port for process-id 43604: (os/kern) failure (0x5).
 (please check gdb is codesigned - see taskgated(8))
(gdb) 

GDB Wiki で述べられている説明に従ってcertificate を発行し、自前でビルドした gdb に特別に許可を与えることで怒られずに済むようになります。日本語ではこちらのエントリー が分かりやすいと思います。

Python による pretty printer を使う

gdb 7.0 から Python による pretty-printer 用のモジュールが提供され、pretty printer 用の python ライブラリを自作するか、適当なところから取ってきて、$HOME/.gdbinit にそれらを読めるように設定すると、例えば STL コンテナの中身を分かりやすく表示することができるようになります。実例については こちら で説明されています。

2011-12-17

emacs24 + ruby-electric.el

| 03:37

emacs 24 (開発版) で新しく導入された機能の一つである electric-pair-mode を使うと括弧を自動で閉じてくれるようになります. ただ ruby のコードを書くときにお世話になっている ruby-electric.el でもすでに似たような補完機能があるため, 閉じ括弧が二回補完されるという, 非常に残念なことになってしまいます. とりあえず以下のような対処方法で解決できました.

2011-12-05

リハビリ その2

| 04:29

12月です。先日10年使っていた腕時計が壊れました。大阪市街に買い物に行ったら再び風邪をもらったかも。

メインで使っている、Mac (アップグレードによりインストールした OS X Lion) を諸々の事情でクリーンインストールすることに。リンク 先にもあるように、Lion からはインストールディスクがついてこない代わりに、HD のパーティションに、Recovery HD というものがあるので、それを使いクリーンインストール。最近は重要なデータは雲の上に置いてあるのでそんなに困ることもなかった。Leopard のときからずっとアップグレードだったので、負の遺産(?)も葬り去る。これを気に Desktop というディレクトリも消し去りたいし、MacPorts ともサヨナラしたい。ついでに、昔使ってから久しく使っていなかった Dropbox をインストール。昔は必要性は感じなかったが、こういう時はとても助かりますね。

2011-11-26

リハビリ

03:55

どうも今月に入り調子が悪いと思っていたら、去年の夏以来のシンドイ思いのする風邪を引いてしまったので、自宅で療養。ずっと寝ていてもなんなので(かといって頭を使うようなことをすると熱が出るので)、以前からやろうと思っていたローカル環境のファイルを淡々と整理する。ついでに Mac、Linux (ローカル、サーバ)の 3 つの環境でバラバラになって収拾がつかなくなっていた .emacs の山を一つにまとめた。さらについでに風の噂で知った とある Advanced emacs user の設定ファイルを見て、キーバインドも変更しようと思い立ち、片っ端から変更。なぜキーバインドはデフォルトのまま我慢して使っていたのだろうか(ずっと OS の更新をしないまま PC を使っている実家の環境を思い出す)。ほとんどは京都で働いている人のおかげによるところが大きいが、6 年前に使い始めた時に比べたら大分マシになったと思う。