2009年2月28日

共有ライブラリを作って呼んでみる

共有ライブラリで発生した異常をgdbで調べてみる実験をしたく、まずは、共有ライブラリを作成&実験してみた。
環境は、以下。

  • 2.6.18-92.1.22.el5

  • gcc (GCC) 4.1.2 20071124 (Red Hat 4.1.2-42)

にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

以下のファイルをそれぞれ作成してから、make; sh run.shと実行すればめでたく(?)core発生。
"Makefile"
all : test_core

clean :
        rm -f test_core test_core.o liba.so liba.so.1 liba.so.1.0 liba.o
        rm -f core.*

test_core : test_core.o liba.so.1.0
        gcc -g -o test_core test_core.o -L. -la

test_core.o : test_core.c
        gcc -Wall -g -c test_core.c -o test_core.o

liba.so.1.0 : liba.o
        gcc -g -shared -Wl,-soname,liba.so.1 -o liba.so.1.0 liba.o -lc
        ln -sf liba.so.1 liba.so
        ln -sf liba.so.1.0 liba.so.1

liba.o : liba.c liba.h
        gcc -fpic -g -c -Wall liba.c

"liba.h"
int liba();

"liba.c"
int liba()
{
        int i = 10 / 0;
        return 0;
}

"test_core.c"
//
//      coreダンプをあえて作成するプログラム
//
#include "liba.h"

int main(void)
{
        liba();
        return 0;
}

"run.sh"
#!/bin/sh
ulimit -c unlimited
LD_LIBRARY_PATH="."; export LD_LIBRARY_PATH
./test_core
参考資料
GNUソフトウェアプログラミング オープンソース開発の原点 [本] GNUソフトウェアプログラミング オープンソース開発の原点   [本]
販売元:セブンアンドワイ ヤフー店
セブンアンドワイ ヤフー店で詳細を確認する


coreファイルをgdbで調べてみる

前の記事で、採取したcoreファイル(ちょっとファイル名が違うけど)をgdbを使って調べてみる。


gdbに実行ファイル(./test_core)をcoreファイル(./core.5857)を指定して、起動する(下記の下線部分)。
$ gdb ./test_core -c ./core.5857
GNU gdb Red Hat Linux (6.5-37.el5_2.2rh)
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1".


warning: Can't read pathname for load map: 入力/出力エラーです.
Reading symbols from /lib/libc.so.6...done.
Loaded symbols for /lib/libc.so.6
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
Core was generated by `./test_core'.
Program terminated with signal 8, Arithmetic exception.
#0  0x08048376 in main () at test_core.c:3
3               int i = 10 / 0;
(gdb)
最後の赤い部分から、このプログラムがtest_core.cの3行目のint i = 10 / 0;の処理でシグナル8(浮動小数点例外)で異常終了したことが分かる。

coreファイルの生成設定

Linuxでは、デフォルトではcoreファイルは生成されない。以下の様にして生成されるように設定&確認。


<設定値の確認>
$ ulimit -a
core file size           (blocks, -c) 0
data seg size          (kbytes, -d) unlimited
scheduliing priority             (-e) 0
file size                  (blocks, -f) unlimited
.....

<設定>
$ ulimit -c ulimit

<設定値の再確認>
$ ulimit -a
core file size           (blocks, -c) unlimited
data seg size          (kbytes, -d) unlimited
scheduliing priority             (-e) 0
file size                  (blocks, -f) unlimited
.....

<以下のファイルを編集>
$ vi test_core.c
int main()
{
  int i = 10 / 0;
  return 0;
}

<コンパイル>
$ make test_core
cc     test_core.c    -o test_core
test_core.c: In function `main':
test_core.c:3: 警告: division by zero

<実行と確認>
$ ./test_core
浮動小数点演算例外です (core dumped)
$ ls core*
core.5799

2009年2月23日

lightningからWebDAV上のカレンダーを使ってみる。

こんな感じで、iCalendarを設定してみた。(Vista SP1, lightning 0.9)

  1. "ネットワークのサーバに保存する"を選択

  2. "iCalendar (ICS)"を選択し、"http://localhost/webdav/test.ics"と入力

  3. メールを"なし"に設定

XAMPP(1.7.0)のWebDAVのパスワード設定

VistaをホストOSにして、VMwareを使っていろんなゲストOSを試している。

Vistaに入れいているXAMPP(1.7.0)にWebDAV機能が付いているそうで、そこにカレンダーを置いて各ゲストOSから共有しようかと画策。

いろいろ試すが、どうもIDとパスワードの入力のところで躓く。google先生によると、wampp/xamppというIDとパスワードが設定されているらしいのだが??

C:\xampp\apache\conf\extra\httpd-dav.confをよく読んで、以下のコマンドを実行してみた。
c:\xampp\apache\bin\htpasswd -bc c:\xampp\security\htpasswd.webdav <ID> <Password>
どうもIDとパスワードはインストール時には設定されておらず、自分で改めて設定する必要があるようだ。そもそもc:\xampp\security\htpasswd.webdavってファイルが最初はなかったし。

2009年2月22日

CentOS5.2(VMware 2.0)でDVDの取り出しが出来ない!

この間からCentOS5.2をVMware上で試しているが、DVDドライブが開かない。物理的にボタンを押しても開かないし、CentOSのデスクトップ上から[取り出し]を選択しても開かない。果ては、CentOS5.2をシャットダウンしても開かない。


VMWareが悪いのか、CentOSが悪いのか、切り分けのために、VMWare上の設定のCD/DVDの設定で"Access the drive directory"を選択したら、あっさりと解決。


2009年2月20日

TrustedInstallerとオートギア

前述の記事「TrutedInstallerの悪さ」に関連して、TrustedInstallerの実行優先度を最初から変えられないのか調べてみたが、有用な情報は見当たらず。たまたま、監視して自動的に優先度を買えてくれるという表題の「オートギア」というフリーソフトを見かけたので使ってみることに。
Vistaは未対応になっているが、とりあえず動いた。以下のように使ってる。

  • スタートアップフォルダに入れた
  • 管理者として実行とした→ログオン起動の都度、UACから文句を言われるけど。

とりあえず、TrustedInstaller.exeが起動される都度、優先度を自動で下げてくれている。画面が固まることはなくなったようだ。

(追伸 2009.05.04)
固まることはなくなったがTrustedInstaller.exe自身が微小だがCPUを使い続ける。それが原因かどうか分からないけど、冷却用のファンがよく回っているような気がする。。

(追伸 2009.10.20,2009.10.23)
オートギアの設定手順を追加しておく。
1. まず、Vectorからautogear.lzhをダウンロード
2. autogear.lzhを展開。※自分は、展開にはWinRARを使用。
3. 展開されたautogear.exeとautogear.txtをC:\Program Files\AutoGearに移動。
4. スタートボタンを右クリックし、[開く(O)]を選択。"スタートアップ"フォルダへ移動。
5. "スタートアップ"フォルダで"C:\Program Files\AutoGear\AutoGear.exe"のショートカッタを作成。
6. できたショートカットを右クリックし、プロパティを開く。
7. [詳細設定(D)...]をクリックし、[管理者として実行(R)]をチェック。[OK]-[OK]
8. ショートカットをクリックして、AutoGearを起動。
9. [オプション(O)...]-[監視]タブとクリックし、[すべてのアプリケーションの優先度を変更可能にします]をチェック。
10. [追加(A)...]をクリック、プログラム名に"trustedinstaller.exe"を記述。指定優先度に"通常以下"に設定。[OK]し[隠す(H)]をクリック。

TrustedInstaller.exeの悪さ

去年の10月頃から、Vistaを使いはじめてるいるが、困ったことに”画面が時々固まる。マウスも反応しない。暫くすると復旧する。”という現象に度々あうことがある。TrustedInstaller.exeという輩がCPUを100%近く使っているのが分かったので、その対処方法をを示す。

タスクマネージャを立ち上げて、「すべてのユーザプロセスを表示(S)」とすると、どうもTrustedInstaller.exeという輩がCPUを100%近く使っているのが分かった。TrustedInstaller.exeの「優先度の設定(P)」を「通常以下(B)」に設定すると、100%のままだが、画面が固まることはなくなる。問題は解決するが、これでは非常に面倒だ。
因みに、TrustedInstaller.exeは、"Windows Modules Installerサービス"の実体。止めないほうがよいものの様子。
追伸
「オートギア」というフリーソフトで自動で優先度を変えられました。記事はこちら
追伸 2009.10.20
Vista SP1では、タスクマネージャの「すべてのユーザプロセスを表示(S)」を押すと、タスクマネージャがそのまま終了してしまうことがある様子。

2009年2月16日

stdio.hが見つからない!

CentOS 5.2を入れて、久しぶりにC言語をいじろうとしているが、なんとstdio.hが無いと怒られる。エラーは以下。
error: stdio.h: No such file or directory
glibc-headersを入れて解決。入れ方は以下。
# yum install glibc-headers