Автор Тема: Невозможный вывод на экран  (Прочитано 2212 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн mihail_1

  • Местный житель
  • ***
  • Сообщений: 169
Невозможный вывод на экран
« : 12 Мая 2013, 06:55:17 »
Вывод приложения при запуске с командной строки перенаправлен в файл (угловой скобкой) и туда и попадает. Но иногда на экран выводятся какие-то двоичные данные вида "їїїїїїїїїїїїїїї&ї'ї(ї)ї*ї+ї,ї-ї.ї/ї0ї1ї2ї3ї4ї5ї6ї7ї8ї9ї:ї;ї<ї=ї•ї–ї—її™їММmС\г}я~яЂяЃя‚яѓя„я…я†я‡я€я‰яЉя‹яЊяЌяЋяЏяђя‘я’я“я”я•я–я—яя™яљя›яњяќяћяџя яЎяўяЈя¤яҐя¦я§яЁя©яЄя{1|1}1~1Ђ1Ѓ1‚1ѓ1„1…1†1‡1€1‰1Љ1‹1Њ1Ќ1Ћ1Џ1ђ1‘1’1“1”1•1–1—11™1љ1›1њ1ќ1ћ1џ1 1???????????? ?!?"?#?$?%?&?'?(?)?*?+?,?-?.?/?0?TOUOVOWOXOYOZO[O\O]O^O_O`OaObOcOdOeOfOgOhOiOjOkOlOmOnOoOpOqOrOsOtOuOvOwOxOкXлXмXнXоXпXрXсXтXуXфXхXцXчXшXщXъXыXьXэXюXяXYYYYYYЋ_Џ_ђ_‘_’_“_”_•_–_—__™_љ_›_њ_ќ_ћ_џ_ _Ў_ў_ЎfўfЈf¤fҐf¦f§fЁf©fЄf«f¬f­f®fЇf°fЭfЮfЯfаfбfвfёo№oєo»oјoЅoѕoЫoЬoЭoЮoЯoаoбoвoгoдoеo@pApBpCpРuСuТuУuФuХuЦuЧuШuЩuЪuЫuЬuЭuЮuЯuаuбuвuгuдuеuжuзк…л…м…н…о…п…р…с…т…у…ф…х…ц…ч…ш…щ…ъ…ы…ь…э…ю…я…†7Ћ8Ћ9Ћ:Ћ;Ћ<Ћ=Ћ>Ћ?Ћ@", которые точно не принадлежат нормальному выводу приложения, непонятно откуда берутся и как пролезают на экран. Запуск под valgrind ничего не меняет, valgrind об ошибках, которые могли бы быть причиной не сообщает. Что это может быть?
 

Оффлайн qupl

Re: Невозможный вывод на экран
« Ответ #1 : 12 Мая 2013, 09:06:11 »
Библиотеки наверняка какие-то используются, там может быть отладочный вывод?

Оффлайн mihail_1

  • Местный житель
  • ***
  • Сообщений: 169
Re: Невозможный вывод на экран
« Ответ #2 : 12 Мая 2013, 09:16:05 »
Библиотеки используются стандартные и mysql. Используются не первый день и такого (и к тому же стабильного) эффекта раньше не наблюдалось. Скорее я чего-то в программе накосячил.
Но в программе есть отладочные вывод и он идет на консоль, но на нее не попадает поскольку перенаправлен в файл при запуске. Как же это пролезает?
 

Оффлайн qupl

Re: Невозможный вывод на экран
« Ответ #3 : 12 Мая 2013, 09:24:16 »
И stdout и stderr в файл перенаправлены?

Оффлайн mihail_1

  • Местный житель
  • ***
  • Сообщений: 169
Re: Невозможный вывод на экран
« Ответ #4 : 12 Мая 2013, 10:53:54 »
Вот кто из них кто я не совсем представляю. Программа на Си. Выводит printf. Я предполагал что это stdout. Что такое stderr я не знаю, но вероятно на него должны выводиться сообщения об ошибках и тогда надо эти ошибки исправить.

Перенаправляю вывод я ./программа > файл
Что при этом перенаправляется?
 

Оффлайн Malaheenee

Re: Невозможный вывод на экран
« Ответ #5 : 12 Мая 2013, 13:35:03 »
mihail_1, только stdout. stderr вместе с stdout выводится program &> filename.
Все мы где-то, когда-то и в чем-то были новичками.
 

Оффлайн mihail_1

  • Местный житель
  • ***
  • Сообщений: 169
Re: Невозможный вывод на экран
« Ответ #6 : 12 Мая 2013, 14:03:38 »
А как определять какая библиотека может выдавать столь информативные сообщения об ошибках?
 

Оффлайн Malaheenee

Re: Невозможный вывод на экран
« Ответ #7 : 12 Мая 2013, 18:07:31 »
На ум приходит только тупой метод брутфорса - отключать по одной и смотреть вывод.
Все мы где-то, когда-то и в чем-то были новичками.
 

Оффлайн mihail_1

  • Местный житель
  • ***
  • Сообщений: 169
Re: Невозможный вывод на экран
« Ответ #8 : 12 Мая 2013, 18:46:58 »
Это как если шатается табуретка - откручивать по одной ножке пока шататься не перестанет? Такой способ пременим не во всех задачах. У меня приложение собирает обрабатывает и складывает в базу данные, причем в обработке используются ранее положенные в базу данные. Если я у этой табуретки одну ножку откручу она просто упадет.
Пока вернулся к предыдущей версии кода, через несколько часов узнаю результат.
 

Оффлайн Malaheenee

Re: Невозможный вывод на экран
« Ответ #9 : 13 Мая 2013, 06:14:43 »
С базой, говорите работает? А если в самой базе поискать такие двоичные данные, может это какая-то мусорная запись?
Все мы где-то, когда-то и в чем-то были новичками.
 

Оффлайн mihail_1

  • Местный житель
  • ***
  • Сообщений: 169
Re: Невозможный вывод на экран
« Ответ #10 : 13 Мая 2013, 11:33:57 »
По виду это похоже на данные индексного файла mysql, но сравнение с имеюющимися файлами показало существенные отличия. (но даже в случае подтверждения было бы непонятно, почему данные вместо файлов вдруг начали попадать на консоль)

Тест со старой версией сделать не удалось, она не достаточно старая.

Пытаюсь не перенаправляя свой отладочный вывод в файл определить примерное место выдачи этих странных сообщений (не слишком успешно - в программе  более сотни потоков)

Сообщение объединено: 13 Мая 2013, 16:55:43
Удалось локализовать это безобразие. Хотя легче не стало.
write, который должен (и раньше нормально это делал) писать в свой файл, почему-то пишет на консоль. Файл открывает функцией open. Открывается успешно, но в него ничего не пишется.

Сообщение объединено: 13 Мая 2013, 18:34:12
Осталось неясным почему valgrind не поймал выхода индекса за границу массива - значение переменной испорчено, хорошо что 0 туда прописался. (ну ладно индекс как-нибудь вручную отловлю)
« Последнее редактирование: 13 Мая 2013, 18:34:12 от mihail_1 »
 

Оффлайн smallNix

Re: Невозможный вывод на экран
« Ответ #11 : 17 Мая 2013, 21:28:32 »
Я не большой специалист по valgrind, но даже в статье в wiki написано, что он не очень хорошо обнаруживает ошибки выхода за границы массива, так что не стоит этому удивляться. :) А вообще - кусок программного кода не помешал бы ;)
Кто-то же должен что-то делать...
 

Теги: