LINUX.ORG.RU

Сообщения Lestat

 

Openswan + Radius

Форум — Admin

Openswan поддерживает авторизацию через Radius?

Lestat
()

«GDB и разделяемые библиотеки» или «пустой стэк в GDB возвращается».

Форум — Development

Как-то я писал здесь (http://www.linux.org.ru/view-message.jsp?msgid=442903&back=view-group.jsp...) о том, что серваку пришел SIGSEGV, сервак свалился, а GDB мне пустой стэк выдал и даже не показал где ошибка произошла. Так вот седня совсем случайно заметил следующую вещь (привожу typescript файл):

"[root@radius chessd]# gdb
GNU gdb 19991004
Copyright 1998 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".
(gdb) file bin/chessd
Reading symbols from bin/chessd...done.
(gdb) attach 3822
Attaching to program: /usr/local/debug2-chessd/chessd/bin/chessd, Pid 3822
Reading symbols from /lib/libm.so.6...done.
Reading symbols from /lib/libdl.so.2...done.
Reading symbols from /lib/libc.so.6...done.
Reading symbols from /lib/ld-linux.so.2...done.
Reading symbols from /usr/local/debug2-chessd/chessd/./lib/chessd.so...done.
0x1f717e in __select () from /lib/libc.so.6
(gdb) bt
#0 0x1f717e in __select () from /lib/libc.so.6
#1 0x2ac73c in ?? () from /usr/local/debug2-chessd/chessd/./lib/chessd.so
#2 0x8048d78 in main_event_loop () at ficsmain.c:90
#3 0x8049222 in main (argc=5, argv=0xbffffa44) at ficsmain.c:232
(gdb) f 1
#1 0x2ac73c in ?? () from /usr/local/debug2-chessd/chessd/./lib/chessd.so
(gdb) l
175 snprintf(cmd, sizeof(cmd), "/home/fics/bin/backtrace %d > /home/fics/chessd/segv_%d 2>&1",
176 (int)getpid(), (int)getpid());
177 system(cmd);
178 _exit(1);
179 }
180
181 int main(int argc, char *argv[])
182 {
183 int i, foreground, port;
184 void (*timeseal_init)(const char * ) = chessd_function("timeseal_init");
(gdb) quit
The program is running. Quit anyway (and detach it)? (y or n) y
Detaching from program: /usr/local/debug2-chessd/chessd/bin/chessd, Pid 3822
Press any key to continue..."

Это что, простите: "#1 0x2ac73c in ?? () from /usr/local/debug2-chessd/chessd/./lib/chessd.so"?

Странный путь какой-то, однако. Функция не указана. То что выдал 'list' тоже на брехню очень похоже.

Не знаю как это с пустым стэком связано. Но с тем, что GDB мне функцию, в которой произошла ошибка сегментации, не выдал, я думаю, это связано непосредственно.

Lestat
()

Установка лакейл.

Форум — Linux-install

Объясните юзеру что не так:
1. Собираем локаль: "localedef -c -i ru_RU -f CP1251 ru_RU.CP1251".
2. Загрузили таблицу символов для консоли: "loadkeys ru-cp1251.kmap". Сказал что залоадил.
3. Это насколько я понимаю картинки для видеокарты: "consolechars -f /lib/kbd/consolefonts/cyr-sun16.psf". Тут он промолчал, но ошибок не выдал. Вроде так и надо.
4. Это фиг знает что, я уже запутался с кучей всяких соответствий и перекодировок =): "consolechars -m cp1251.acm". Консоулчарс не любит лишних слов. =)
5. Командуем какую-то магическую последовательность (тут я хз =) ) и, якобы, переключаем ядро на работу с новой кодировкой: "echo -ne "\033(K"".
6. Делаем: "export LANG=ru_RU.CP1251". Затем "locale mon" и получаем: ПЭТРап;ДХТаРЫп;_РавР;°ЯаХЫп;_Рп;ёоЭп;ёоЫп;°ТУгбвР;БХЭвпСап;_ЪвпСап;_ЮпСап;_ХЪРСа п".

Приехали...

Lestat
()

Установка лакейл.

Форум — Development

Объясните юзеру что не так:

1. Собираем локаль: "localedef -c -i ru_RU -f CP1251 ru_RU.CP1251". 2. Загрузили таблицу символов для консоли: "loadkeys ru-cp1251.kmap". Сказал что залоадил. 3. Это насколько я понимаю картинки для видеокарты: "consolechars -f /lib/kbd/consolefonts/cyr-sun16.psf". Тут он промолчал, но ошибок не выдал. Вроде так и надо. 4. Это фиг знает что, я уже запутался с кучей всяких соответствий и перекодировок =): "consolechars -m cp1251.acm". Консоулчарс не любит лишних слов. =) 5. Командуем какую-то магическую последовательность (ту я хз =) ) и, якобы, переключаем ядро на работу с новой кодировкой: "echo -ne "\033(K"". 6. Делаем: "export LANG=ru_RU.CP1251". Затем "locale mon" и получаем: ПЭТРап;ДХТаРЫп;_РавР;°ЯаХЫп;_Рп;ёоЭп;ёоЫп;°ТУгбвР;БХЭвпСап;_ЪвпСап;_ЮпСап;_ХЪРСа п".

Приехали...

Lestat
()

Проблема в GDB - пустой стэк.

Форум — Development

Топики здесь автоматически не поднимаются. Так что придется так... "http://www.linux.org.ru/view-message.jsp?msgid=442903&back=view-group.jsp...; Тема, думаю, еще не закрыта. Так что хочется еще пообщаться.

Lestat
()

Популярные форумы по программированию.

Форум — Development

Ребят, поделитесь адресами популярных форумов по программированию. Желательно на C и под UNIX к тому же.

Спасибо.

Lestat
()

Проблема в GDB - пустой стэк.

Форум — Development

Сервер отлаживался под GDB 5.3. Когда сервер получил SIGSEGV GDB остановил выполнение сервера и с радостью мне сообщил, что по адресу 0x0 в функции ?? () возникла ошибка сегментации. На команду 'bt' GDB выдал пустой стэк. Обращался к разработчикам GDB с подробным описанием ошибки, указал им версию компилятора (gcc version egcs-2.91.66) и GDB, как они и просили, но они на отрез отказались помогать, требуя typescript файл и обвиняя, таким образом, меня, лживую морду, в фальсификации информации. =)))

Один программер из баг-рассылки подкинул интересную идею. Вот его письмо:

"I strongly suspect that this is caused by a zero function pointer call, and the example below indeed shows a regression with backtracing from zero function pointer calls between gdb-5.3 and gdb-6.0.

I am not familiar enough with the new frame code to propose a fix though, sorry.

pes@xxxx_7$ cat zerofun.c
void x()
{
void (*fp)() = 0;
fp();
}
int
main()
{
x();
return 0;
}
pes@xxxx_8$ gcc -g zerofun.c
pes@xxxx_9$ gdb-5.3 a.out
GNU gdb 5.3
Copyright 2002 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 "i686-pc-linux-gnu"...
(gdb) r
Starting program: ..../a.out

Program received signal SIGSEGV, Segmentation fault.
0x00000000 in ?? ()
(gdb) bt
#0 0x00000000 in ?? ()
#1 0x08048306 in x () at zerofun.c:4
#2 0x0804831d in main () at zerofun.c:9
#3 0x420158d4 in __libc_start_main () from /lib/i686/libc.so.6
(gdb) q
The program is running. Exit anyway? (y or n) y
pes@xxxx_10$ gdb-6.0 a.out
GNU gdb 6.0
Copyright 2003 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 "i686-pc-linux-gnu"...
(gdb) r
Starting program: ..../a.out

Program received signal SIGSEGV, Segmentation fault.
0x00000000 in ?? ()
(gdb) bt
#0 0x00000000 in ?? ()
(gdb) q
The program is running. Exit anyway? (y or n) y"

В кратце, проблема заключается в вызове функции по нулевому указателю. В сервере как раз есть динамически подключаемая бибилотека. Очень вероятно, что ошибка идет из серверной функции, возвращающей адреса требуемых функций из динамической библиотеки.

Но проблема возникла как раз в 5.3, а не в 6.0.

Кто что думает по этому поводу. Когда ошибка возникнет в следующий раз, я опять не получу никакой информации. А это грозит отправкой большого булыжника в мой огород скоростным рейсом.

Спасибо.

Lestat
()

Вытаскивание большого числа из char *.

Форум — Development

Что делать, если у меня есть значение в пределах unsigned int (т.е. 8 байт) записанное в строке. Ни функцией atoi, ни функцией atol по понятным причинам его оттуда вытащить не получается, потому что в Unix int и long int по четыре байта. Как в таких случаях поступают? Может как-то нужно с символами пошаманить. С лету в голову ответ не приходит. Подскажите.

Lestat
()

Форсирование целой константы в тип long.

Форум — Development

Итак, есть такая функция:

unsigned tenth_secs(void) { struct timeval tp; struct timezone tzp;

gettimeofday(&tp, &tzp); /* .1 seconds since 1970 almost fills a 32 bit int! So lets subtract off * the time right now */ return ((tp.tv_sec - 331939277) * 10L) + (tp.tv_usec / 100000); }

Вроде бы все понятно - берем текущее время, вычитаем из него немного более десяти лет (это, насколько я понимаю, не важно, т.к. программа далее оперирует разностями значений возвращаемыми этой функцией) т.к. (судя по комментарию) многовастенько это будет даже для беззнакового целого (24 года да еще на десять помноженных), потом добавляем миллисекунды, поделенные на 100000 (т.к. мы и секунды на десять помножили).

Но это все фигня, вы мне объясните зачем писать 10<b>L</b>? В статье "<a hre = "http://www.opennet.ru/docs/RUS/ansi-c/ansi-c-2.html">;Описание языка программирования ANSI C. : Элементы С</a>", это называется "форсировать целую константу в тип long". Я бы понял если бы аргумент у какой-нибудь вызываемой функции был long int и вызов происходл таким образом: "function ((long int) 10)" (кстати, это одно и то же, что и "function (10l)"?). Но здесь... не вижу смысла. Прошу помощи.

Lestat
()

Установка CP1251 в RedHat Linux.

Форум — Development

Здравствуйте.

Сделал: 'localedef -c -i ru_RU -f CP1251 ru_RU.CP1251', потом: 'export LANG=ru_RU.CP1251'. Даже каталог из 'ru_RU.cp1251' в 'ru_RU.CP1251' переименовал, но на 'locale mon' все равно гад "ощрпЮО;дурЮпшО;?пЮБ;°ъЮушО;?пы;ёНщО;ёНшО;°рсЦАБп;аущБОяЮО;?зБОяЮО;?чОяЮО;? узпяЮО" выдает. Что делать?

Спасибо.

Lestat
()

Перекодирование потока

Форум — Admin

Есть виндовый клиент, есть сервер (на SuSe). Один юзер другому отправляет сообщение с использованием русского языка, которое сначала отправляется на сервер и после некоторых преобразований отправляется юзеру, которому это сообщение было отправлено, и он видит его в клиенте.

Вопрос в том, как сделать так, чтобы сервер русские буквы не отметал? Мне что-то намекали на decode.c, но пес его знает, как его запустить так, чтобы он поток перекодировал.

В консоли я на русском пишу, файлы с руским сохраняю, а вот с этим делом проблемы.

Посоветуйте что-нибудь =).

Lestat
()

RSS подписка на новые темы