2009年2月28日

[C言語] 共有ライブラリを作って呼んでみる

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

  • 2.6.18-92.1.22.el5

  • gcc (GCC) 4.1.2 20071124 (Red Hat 4.1.2-42)
以下のファイルをそれぞれ作成してから、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

[Linux] 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(浮動小数点例外)で異常終了したことが分かる。

[Linux] coreファイルの生成設定

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

手順

1. 設定値の確認

$ ulimit -a
core file size           (blocks, -c) 0
data seg size          (kbytes, -d) unlimited
scheduliing priority             (-e) 0
file size                  (blocks, -f) unlimited
.....

2. 設定

$ ulimit -c ulimit

3. 確認

3-(1) 設定値の再確認

$ ulimit -a
core file size           (blocks, -c) unlimited
data seg size          (kbytes, -d) unlimited
scheduliing priority             (-e) 0
file size                  (blocks, -f) unlimited
.....

3-(2) 実際にcoreファイルが作成されるかどうかを確認 

a. 以下のファイルを編集

$ vi test_core.c
int main()
{
  int i = 10 / 0;
  return 0;
}

b. コンパイル

$ make test_core
cc     test_core.c    -o test_core
test_core.c: In function `main':
test_core.c:3: 警告: division by zero

c. 実行

$ ./test_core
浮動小数点演算例外です (core dumped)
$ ls core*
core.5799

2009年2月23日

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

iCalendarの設定方法。

環境

  • Vista SP1
  • lightning 0.9

手順

  1. "ネットワークのサーバに保存する"を選択
  2. "iCalendar (ICS)"を選択し、"http://localhost/webdav/test.ics"と入力
  3. メールを"なし"に設定
以上

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

XAMPPでのWebDAVパスワードを設定する方法。

環境

  • Vistaに入れいているXAMPP(1.7.0)のWebDAV機能

手順

c:\xampp\apache\bin\htpasswd -bc
c:\xampp\security\htpasswd.webdav <ID> <Password>

参考 

C:\xampp\apache\conf\extra\httpd-dav.conf
以上

2009年2月22日

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

現象

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

条件

CentOS5.2をVMware上動かす

頻度

必ず

原因

不明

対策

VMWare上の設定のCD/DVDの設定で"Access the drive directory"を選択
以上

2009年2月20日

[Windows] TrustedInstallerとオートギア

前述の記事「TrutedInstallerの悪さ」に関連して、TrustedInstallerの実行優先度を帰るツールとして「オートギア」というフリーソフトを見つけたので以下にメモ。とりあえず、TrustedInstaller.exeが起動される都度、優先度を自動で下げてくれている。画面が固まることはなくなったようだ。

環境

Windows VISTA

手順

  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)]をクリック。
最後に、スタートアップフォルダに管理者として実行するよう設定。ログオン起動の都度、UACから警告が出るが無視。
以上

[Windows] TrustedInstaller.exeの悪さ

現象

Windows使用中に、”画面が時々固まる。マウスも反応しない。暫くすると復旧する。”という現象に見舞われる。

条件

Windows VISTAで確認。

頻度

毎日数回

原因

TrustedInstaller.exeがCPUを100%近く使用することがあるから

対策

対策1 以下をWindows再起動都度実施

  1. タスクマネージャを立ち上げる
  2. 「すべてのユーザプロセスを表示(S)」とする
  3. TrustedInstaller.exeの「優先度の設定(P)」を「通常以下(B)」に設定

対策2 オートギアを使う

記事参照 → こちら
以上

2009年2月16日

[CentOS] CentOS5.xでstdio.hが見つからない!

現象

C言語ソースをコンパイルすると下記エラーが発生。
error: stdio.h: No such file or directory

条件

CentOS 5.2 (他は不明)

頻度

必ず

原因

C言語ヘッダーはデフォルトではインストールされないから

対策

glibc-headersを入れる。入れ方は以下。
# yum install glibc-headers