これで合ってるのかなぁ。
「-g」付きでコンパイル
落ち着いて、「BUILD」を眺めると、make Worldするのは最初だけで、あとは以下のようにXサーバをコンパイルしろと書いてあるように見えます。
3. From xc/programs/Xserver, run:
make Makefile
make Makefiles
make includes
make depend
make
で、Makefileを眺めると、どうにもCDEBUGFLAGSに-gを付ければ良さそうな気がしてきます。
試行錯誤の結果、「2番目の」CDEBUGFLAGSの「-Os」を「-O0 -g」に変更してmakeすれば良さそうです。*1
syasuda@syasuda-ubuntu:~/src/Xming_69031/xc/programs/Xserver$ ls -al Xming.exe
-rwxr-xr-x 1 syasuda syasuda 61013697 2010-04-14 20:23 Xming.exe
gdbセッションサンプル
ばかでかいexeができたので、早速gdbに放り込んでみます。
(gdb) f
#0 UpdateName (pWMInfo=0x3fb918, iWindow=14680068) at winmultiwindowwm.c:547
547 if (pszName)
(gdb) p/s pszName
$18 = 0x45b41b0 "syasuda@syasuda-ubuntu: ~/\262\350\301", <incomplete sequence \
374>
(gdb) f
#0 UpdateName (pWMInfo=0x3fb918, iWindow=14680068) at winmultiwindowwm.c:547
547 if (pszName)
(gdb) l
542 if (!hWnd) return;
543 if (!IsWindow (hWnd)) return;
544
545 /* Set the Windows window name */
546 GetWindowName (pWMInfo->pDisplay, iWindow, &pszName);
547 if (pszName)
548 {
549 /* syasuda */
550 {
551 int i;
(gdb) n
553 ErrorF ("DEBUG(syasua)::");
(gdb) c
Continuing.
うひゃひゃ。
ただ、stepとnextの切替がどうにもおかしいですな。gdbserverの限界ですかね。
ウィンドウタイトルはEUCで取得?
デバッガで眺めるまでも無く、GetWindowName()で取得したものはEUCになっているぽいです。よくわかりませんがUbuntuの端末では、UTF-8になってるようなんですが。
syasuda@syasuda-ubuntu:~/画像$ export|grep LANG
declare -x LANG="ja_JP.UTF-8"
declare -x LANGUAGE="ja_JP:ja:en_GB:en"
まとめ
- Xサーバを-g付きでコンパイルするには、programs/Xserver辺りでMakefileを生成してから手で書き直すのが早い
- CROSSCOMPILEDIR指定付けるの忘れずに
次の展開
- もう少しgdbで追いかける
- emacsからgdb(なんて呼ぶんだっけあれ)したいのでなんとかする
- insightを試してみる?
コメント