デバッグ用にコンパイル

  • 投稿日:
  • by
  • カテゴリ:



これで合ってるのかなぁ。


「-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を試してみる?






*1:とてつもなく古い文書にも似たような記述がありましたー>http://www.filewatcher.com/p/xorg-1.tar.gz.15879579/xc/programs/Xserver/hw/xfree86/doc/Japanese/VGADriver.doc.html