UNIXプログラミング質 ..
975:デフォルトの名無しさん
05/09/21 14:08:17
Win32は、
・コンセプト単純
・関数仕様複雑
・機能貧弱
POSIX fork()は、
・コンセプト抽象的
・関数仕様超単純
・(モデルが)高機能
fork()に戸惑う人は、抽象的なコンセプトにやられていると思われ
fork/joinモデルよりも、分身が出来るという概念に。
976:デフォルトの名無しさん
05/09/21 17:12:14
Linux環境で、getopt()を使ってるプログラムをgdbでデバッグ
してるんだけど、いくらgetopt()してもoptindをprintコマンド
で見るといつも1になってるんです。
コード中でprintf()してoptindを見ると、ちゃんと数字が上がる
んだけど。
で、optindのポインタを調べてみたら、gdbでprintしたやつと
コード中でprintf()したやつとは違った物になってた。
どうやったらgdbで正しいoptindを見ることが出来ますでしょうか。
977:デフォルトの名無しさん
05/09/21 20:04:01
試さずに適当に答えるが、最適化されちゃってんじゃないのかな。
最適化外してコンパイルしてみればあ。
978:デフォルトの名無しさん
05/09/21 20:17:42
libcコンパイルしなおせばいいんだと思うが、そもそも板違い。犬板逝け
979:デフォルトの名無しさん
05/09/21 20:19:04
(´・ω・`)
980:デフォルトの名無しさん
05/09/21 21:13:30
fork()の仕様が単純とか言ってる奴は池沼ですか
981:デフォルトの名無しさん
05/09/21 21:20:42
>>978
逆だろ? callerが、calleeによって変えられたメモリじゃなくて、
registerのみを見てるんだろ?
(gdb) printf *(&optind)
でどうかな?
982:976
05/09/22 10:15:47
皆様ありがとうございます。
CPUに弱いのでcallerとかcalleeとか全くわからいのですが、
>>981さんの言う
(gdb) print *(&optind)
でも結局同じでした。
皆さんの環境ではどうなんでしょうか。ちゃんと正しい optind
が gdb の print で見れているのでしょうか。
あと、犬板に相応のスレが無いのでここに来た次第です。
983:デフォルトの名無しさん
05/09/22 10:39:38
試してみたけどこのぐらいの簡単なプログラムで確かにその現象がでるな。
#include <stdio.h>
#include <unistd.h>
extern int optind;
int main(int argc, char **argv)
{
int opt;
while ((opt = getopt(argc, argv, "abc")) >= 0) {
printf("opt=%c optind=%d &optind=%08x\n", opt, optind, (int)&optind);
}
}
984:デフォルトの名無しさん
05/09/22 10:40:20
↑をgdbにかけるとこんな感じ。
(gdb) break 9
Breakpoint 1 at 0x8048414: file optind.c, line 9.
(gdb) run -a -b
Starting program: /home/matsui/a.out -a -b
Breakpoint 1, main (argc=3, argv=0xbfdd1884) at optind.c:9
9 while ((opt = getopt(argc, argv, "abc")) >= 0) {
(gdb) s
10 printf("opt=%c optind=%d &optind=%08x\n", opt, optind, (int)&optind);
(gdb) s
opt=a optind=2 &optind=080496b8
9 while ((opt = getopt(argc, argv, "abc")) >= 0) {
(gdb) print optind
$1 = 1
(gdb) print &optind
$2 = (int *) 0xb7fb07d8
どうなってんのかね?
985:>>981
05/09/22 11:03:22
(gdb) print *((int *) 0xb7fb07d8)
すると、正しい値だね。
986:>>981
05/09/22 11:07:49
URLリンク(lists.gnu.org)
にも報告されてる。
6.0, 6.3でも駄目。
987:デフォルトの名無しさん
05/09/22 15:34:09
スレリンク(tech板)
>GNUが低品質なのはconfigureと無関係ではないだろう。
>GNUが低品質なのはconfigureと無関係ではないだろう。
>GNUが低品質なのはconfigureと無関係ではないだろう。
988:デフォルトの名無しさん
05/09/22 15:42:27
GNUって究極の低賃金労働者の粗悪品だろ。
989:デフォルトの名無しさん
05/09/22 15:47:22
そもそもソース配布なんて馬鹿げた思想を排除すべき。
990:デフォルトの名無しさん
05/09/22 15:48:14
まさにこの業界にとっての諸悪の根源だね
991:デフォルトの名無しさん
05/09/22 15:50:44
GDBっつーかGNU謹製のクソさ加減がよくわかった
992:デフォルトの名無しさん
05/09/22 15:52:09
でも、糞UNIXがいまだに生き残ってるのはGNUのおかげなんだよな。
993:デフォルトの名無しさん
05/09/22 15:53:36
SourceForge死ね
994:デフォルトの名無しさん
05/09/22 15:56:02
価値のあるソフトを作ってください
995:デフォルトの名無しさん
05/09/22 15:57:57
>>98
同意!
RMSは反社会的な共産主義者!
996:デフォルトの名無しさん
05/09/22 15:58:34
国にはGPLコードの輸入の禁止措置をとってもらいたい。
このままでは国内産業が壊滅してしまう。
997:デフォルトの名無しさん
05/09/22 16:00:13
おれもそう思う。
こういうソース公開の押し付けは、いらないんじゃないかって。
998:デフォルトの名無しさん
05/09/22 16:01:27
UNIX向けの商用のソフトが存在しないのは
こいつのせい
999:デフォルトの名無しさん
05/09/22 16:02:19
存在しないオプションを渡した時のoptoptは正しく読めるな。
それから、gdbで、optind = 100としても、メモリ側は書き変わってないけれど、
(gdb) print optind
すると、100が出力される。
やはり>>981ということで、メモリをフェッチせずにレジスタを見ているようだ。
1000:デフォルトの名無しさん
05/09/22 16:02:19
次スレ
スレリンク(tech板)
1001:1001
Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5391日前に更新/207 KB
担当:undef