Шлялся сегфолт по функциям, до белого каления довел, перелопатил все рядом располагающиеся функции.3агнал таки падлюку сежду между двумя псевдо-отладочными вызовами write():
в исходниках сразу за write(100300, "1", 1) идет write(100400, "1", 1).Кто-то может подсказать в чем трабла ???
вывод через strace:
"
...
getpid() = 4049
chdir("/home/bla-bla") = 0
stat64("bla-bla/lock", {st_mode=S_IFREG|0600, st_size=0, ...}) = 0
write(100300, "1", 1)
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
"вывод через gdb:
"
Program received signal SIGSEGV, Segmentation fault.
0x4e3be25a in ?? ()
(gdb) backtrace
#0 0x4e3be25a in ?? ()
#1 0x400f1273 in write () from /lib/libc.so.6
#2 0x00000009 in ?? ()
#3 0xbffffe11 in ?? ()
#4 0x0804a986 in prep_main (ssn=0x8054a00) at lalala.c:800
#5 0x0804aa96 in main () at lalala.c:827
"
> Шлялся сегфолт по функциям, до белого каления довел, перелопатил все рядом располагающиеся
> функции.
> 3агнал таки падлюку сежду между двумя псевдо-отладочными вызовами write():
> в исходниках сразу за write(100300, "1", 1) идет write(100400, "1", 1).
> Кто-то может подсказать в чем трабла ???Кто такие 100300 и 100400? Что у тебя в /proc/sys/fs/file-max ?
А вообще похоже на то, что ты запахал file descriptor table к моменту вызова write.
> Кто такие 100300 и 100400? Что у тебя в /proc/sys/fs/file-max ?
> А вообще похоже на то, что ты запахал file descriptor table к
> моменту вызова write.Призрачные дескрипторы:
>write(100300, "1", 1) = -1 EBADF (Bad file descriptor)Eсли заменить вызов write() на read(), с заменой соответствующих параметров, картина не меняется.
Заработало:
в итоге переупорядочил и развернул тело функции prep_main и две ее локальные переменные типа int, char* сделал глобальными.Похоже гороскоп для этой версий libc при старом расположении планет, переменных и функций был составлен не верно.
Хотя на других линях и фряхах все пучком было.
>> Шлялся сегфолт по функциям, до белого каления довел, перелопатил все рядом располагающиеся
>> функции.
>> 3агнал таки падлюку сежду между двумя псевдо-отладочными вызовами write():
>> в исходниках сразу за write(100300, "1", 1) идет write(100400, "1", 1).
>> Кто-то может подсказать в чем трабла ???
> Кто такие 100300 и 100400? Что у тебя в /proc/sys/fs/file-max ?
> А вообще похоже на то, что ты запахал file descriptor table к
> моменту вызова write.Написано же -он так отладку осуществил, думая смотреть стрейсом. Есть код, который падает, он придумал обрамить его данными write в несуществующие дескрипторы. А упало именно в этих вызовах write! И так как упало именно в этих write(), то смыслом и пользой добавления данных вызовов является вытеснение вконтакта и прочих порноресурсов из рабочего времени разработчика. Когда думаешь о работе, часто приходят полезные сопутствующие мысли, которые вполне могут решить поставленную задачу. Как мы видим ниже из признания автора, так и произошло в данном случае.