gdbとgdbserverをコンパイル

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



難しく考えすぎでしたね。


gdbのソースからgdbserver for Mingwをコンパイル


gdbのソースからgdb/gdbserverをコンパイルすればよいだけのことでした。


きっかけはたまたま見かけたこのページ。


gdb (Linux) -> gdbserver (mingw32 cross compiled library)


http://old.nabble.com/gdb-%28Linux%29--%3E-gdbserver-%28mingw32-cross-compiled-library%29-td15128334.html


質問:



・・・Is there a


way to use the MinGW32 ported gdbserver to debug the MinGW32 compiled


library from a Linux hosted gdb session (I wish to use Insight)?



回答:



・・・


You'll need to configure


and build gdbserver and gdb separately. The gdbserver/ subdirectory in


the gdb source tree is standalone, you can run its configure directly to


build gdbserver. I think you want --host=mingw32 --target=mingw32 for


gdbserver and then --host=i686-pc-linux --target=mingw32 for gdb.


・・・


私はgdbとgdbserverのバージョンをぜひとも揃えたかったので、Ubuntu上でgdb-7.1のソースから両方ともビルドしました。gdbは問題ありませんでしたが*1、gdbserverはちょっと手間取りました。


configureスクリプトに無理やりMingw32コンパイラを指定


autoconfのことは初心者レベルで、以前にチュートリアルを読んだ程度しか経験もありません。上記のオプションではWIN32のヘッダも読み込まれず、さらにmingw32のgccが呼び出されず、エラーになります。たぶんUbuntu上のMingw32開発環境がスッカスカなのが原因かと思います。面倒なので、以下のようにconfigureを実行してごまかしました。



$ CC='/usr/i586-mingw32msvc/bin/gcc' CFLAGS='-I/usr/i586-mingw32msvc/include/' ./configure --host=mingw32 --target=mingw32

先日来、Xmingをコンパイルしようとしているので、http://www.freedesktop.org/wiki/Xming/Buildingにあるようにシンボリックリンクが張られている先を指定しています。


まだXmingを-g付きでコンパイルしていません。たぶんMakefileのCFLAGSに直接-g付けることになると思います。とりあえずgdb--->gdbserverの動作確認だけしておきました。


UbuntuからWindowsへgdbでリモートデバッグ


まずWindows(ターゲット 192.168.1.9)上で、Xming.exeのPIDを調べて、gdbserverでプロセスにアタッチします。先にファイアウォールでポートを空けておいたほうがよさそうです。



C:\cygwin\home\yasuda>gdbserver.exe 192.168.1.100:60000 --attach 3520


Attached; pid = 3520


Listening on port 60000


Remote debugging from host 192.168.1.100



この時点でXming.exeはフリーズ状態になります。


次にUbuntu(ホスト)上でgdbを起動して、ターゲットへ接続します。



syasuda@syasuda-ubuntu:~/src/Xming_69031/xc$ /home/syasuda/src/gdb-7.1/gdb/gdb
Xming.exe
GNU gdb (GDB) 7.1
Copyright (C) 2010 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 "--host=i686-pc-linux --target=mingw32".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/syasuda/src/Xming_69031/xc/Xming.exe...done.
(gdb) target remote 192.168.1.9:60000
Remote debugging using 192.168.1.9:60000
warning: Can not parse XML target description; XML support was disabled at compi
le time
warning: Can not parse XML library list; XML support was disabled at compile tim
e
0x7c94e514 in ?? ()
(gdb) bt
#0 0x7c94e514 in ?? ()
#1 0x7c94df5a in ?? ()
#2 0x71985fa7 in ?? ()
#3 0x719e314f in ?? ()
#4 0x0042750e in AuthorizationFromID ()
#5 0x00000000 in ?? ()
(gdb) list
1 /build/buildd/mingw32-runtime-3.15.2/build_dir/src/mingwrt-3.15.2-mingw3
2/crt1.c: No such file or directory.
in /build/buildd/mingw32-runtime-3.15.2/build_dir/src/mingwrt-3.15.2-min
gw32/crt1.c
(gdb) quit
A debugging session is active.

Inferior 1 [Remote target] will be detached.

Quit anyway? (y or n) y
Ending remote debugging.
syasuda@syasuda-ubuntu:~/src/Xming_69031/xc$

何もでないと分かっていてもgdbのコンソールを見ると反射的にbtと打ち込んでしまうのは強力な刷り込まれの影響でしょうかね。


gdbでquitすると、gdbserverも終了します。ターゲット上のデバッギはデタッチされて動作を再開します。タイムアウトなどで落ちることなく動作してくれました。これはありがたいです。・・・と思ったらxtermでEnter叩いたら落ちちゃいました。



次の展開は、



  • Xming.exeを-g付きでコンパイル


まとめ



  • gdbのソースからmingw用のgdbserverをLinux上でコンパイルすることができる

    • 全機能が使えるかどうかは未確認





今日のemacs~revert-buffer


バッファを再読み込みするコマンドを何回調べても覚えられません。


M-x revert-buffer


たぶんrevertという単語が連想できないからのような気が。




*1:libncurses5-devが不足したがapt-getした。