Russian Qt Forum

Qt => Общие вопросы => Тема начата: Noize_programmer от Февраль 11, 2023, 13:30



Название: программа зависает (Tcp network)
Отправлено: Noize_programmer от Февраль 11, 2023, 13:30
решено        решено        решено        решено        решено        решено        решено        решено        решено        решено        решено        решено
решено        решено        решено        решено        решено        решено        решено        решено        решено        решено        решено        решено
решено        решено        решено        решено        решено        решено        решено        решено        решено        решено        решено        решено
решено        решено        решено        решено        решено        решено        решено        решено        решено        решено        решено        решено

git:
client:https://github.com/SpeechKingV/Tcp_Client (https://github.com/SpeechKingV/Tcp_Client)
server:https://github.com/SpeechKingV/Tcp_server (https://github.com/SpeechKingV/Tcp_server)

client вывод сборки:

13:27:52: Выполняются этапы для проекта TCP_client...
13:27:52: Настройки не изменились, этап qmake пропускается.
13:27:52: Запускается: «F:\Qt5.14\Tools\mingw730_64\bin\mingw32-make.exe» -j6
F:/Qt5.14/Tools/mingw730_64/bin/mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory 'F:/Qt_project/5.0.2/lesons/Book/TCP_client/build-TCP_client-Desktop_Qt_5_12_12_MinGW_64_bit-Debug'
mingw32-make[1]: Nothing to be done for 'first'.
mingw32-make[1]: Leaving directory 'F:/Qt_project/5.0.2/lesons/Book/TCP_client/build-TCP_client-Desktop_Qt_5_12_12_MinGW_64_bit-Debug'
13:27:54: Процесс «F:\Qt5.14\Tools\mingw730_64\bin\mingw32-make.exe» завершился успешно.
13:27:54: Прошло времени: 00:01.

server вывод сборки:

13:27:53: Запускается F:\Qt_project\5.0.2\lesons\Book\TCP_server\build-TCP_server-Desktop_Qt_5_12_12_MinGW_64_bit-Debug\debug\TCP_server.exe ...
13:28:43: F:\Qt_project\5.0.2\lesons\Book\TCP_server\build-TCP_server-Desktop_Qt_5_12_12_MinGW_64_bit-Debug\debug\TCP_server.exe завершился с кодом 0



Название: Re: программа зависает (Tcp network)
Отправлено: kambala от Февраль 11, 2023, 13:58
вот тут как раз нужен не вывод сборки, а вывод приложения (для сервера ты именно его выложил :) ). По выводу сервера видно, что он не зависает, а завершается без ошибок (код 0). Значит клиент зависает?


Название: Re: программа зависает (Tcp network)
Отправлено: kambala от Февраль 11, 2023, 14:11
можно попробовать добавить socket->waitForBytesWritten(500) после socket->write(...) для синхронного ожидания отправки данных.

- файл с расширением user не надо класть в репозиторий, почитай про игнорирование файлов в гите (файл .gitignore)
- в клиенте метод SError() никогда не будет вызван, подумай почему (в выводе программы должна быть подсказка)
- на пробелах экономить не надо (вызовы connect)
- написание слова socket в двух вариациях (и обе ошибочны) — это нечто :) прививай себе культуру написания кода, в будущем это поможет не только тебе, но и тем, кто будет читать твой код


Название: Re: программа зависает (Tcp network)
Отправлено: sergek от Февраль 11, 2023, 19:00
Можно попробовать убрать опцию -j6 и пересобрать проекты. У меня случалось, что при такой сборке программы сбоили, с тех пор я ее никогда не использую.


Название: Re: программа зависает (Tcp network)
Отправлено: tux от Февраль 11, 2023, 19:07
Эта опция имеет смысл, если вы собираете либо мегабольшой проект либо набор проектов. При сборке мира ещё имеет смысл (если вы джентушник, как я  :))
При одиночном небольшом проекте лучше собирать в один поток.


Название: Re: программа зависает (Tcp network)
Отправлено: kambala от Февраль 11, 2023, 19:35
вот это поворот :) ни разу еще не ловил проблем из-за этого


Название: Re: программа зависает (Tcp network)
Отправлено: sergek от Февраль 11, 2023, 19:41
Не я один. В сети есть предположения, что make ошибается с зависимостями при многопоточной сборке.


Название: Re: программа зависает (Tcp network)
Отправлено: tux от Февраль 11, 2023, 19:45
вот это поворот :) ни разу еще не ловил проблем из-за этого
Мало собираете, видимо. Или не линуксоид. :)
Иногда пакеты мира могут не собраться именно из-за многопоточной сборки. Логика в том, что зависимый объектный файл может начать собираться позже, чем необходимо. Ошибка странная, если опыта не имеешь - вообще не понимаешь, что происходит. Стоит поставить -j1 - все собирается уже нормально.


Название: Re: программа зависает (Tcp network)
Отправлено: kambala от Февраль 11, 2023, 20:36
ну «миры» не собираю, конечно, но при сборке той же Qt ни разу на такое не напарывался

а мэйк же на всех платформах одинаковый :)


Название: Re: программа зависает (Tcp network)
Отправлено: tux от Февраль 11, 2023, 21:18
ну «миры» не собираю, конечно, но при сборке той же Qt ни разу на такое не напарывался

а мэйк же на всех платформах одинаковый :)
Проблема не в "мэйке" :) Допустим ваше приложение состоит из 100500 плагинов, каждый из которых собирается на базе предыдущего (что-то типа наследования). При однопоточной сборке всё будет прекрасно. А вот при многопоточной будут проблемы. Если сильно интересно, можно поискать на форумах gentoo - там встречаются иногда ошибки совершенно иррациональные. Да, так программу лучше не строить,но если хочется, то можно. :D


Название: Re: программа зависает (Tcp network)
Отправлено: kambala от Февраль 11, 2023, 21:31
вполне может быть проблема именно мэйка, а какие-нибудь более умные сборщики типа ниндзи могут обрабатывать подобные ситуации (не утверждаю, что это действительно так)


Название: Re: программа зависает (Tcp network)
Отправлено: tux от Февраль 11, 2023, 21:53
а какие-нибудь более умные сборщики типа ниндзи могут
И с ними бывают точно такие же проблемы (с ninja точно видел). Проблема то в архитектуре проекта, а не в самом сборщике. Да и есть чуть ли не поколение программистов (в основном на JAVA, конечно), которые могут отдельную функцию положить в отдельный класс, потом все 100500 файлов положить в один проект.


Название: Re: программа зависает (Tcp network)
Отправлено: kambala от Февраль 11, 2023, 23:07
я подумал, речь конкретно о сборщике при правильной архитектуре :) так-то конечно, любой сборщик упадет.


Название: Re: программа зависает (Tcp network)
Отправлено: Noize_programmer от Февраль 12, 2023, 10:14
вот тут как раз нужен не вывод сборки, а вывод приложения (для сервера ты именно его выложил :) ). По выводу сервера видно, что он не зависает, а завершается без ошибок (код 0). Значит клиент зависает?
да зависает клиент

вывод приложения клиент:
10:11:22: Запускается F:\Qt_project\5.0.2\lesons\Book\TCP_client\build-TCP_client-Desktop_Qt_5_12_12_MinGW_64_bit-Debug\debug\TCP_client.exe ...
10:11:25: Не удалось получить отладочный вывод.
10:13:35: Программа неожиданно завершилась.
10:13:35: Процесс был завершён принудительно.
10:13:35: F:\Qt_project\5.0.2\lesons\Book\TCP_client\build-TCP_client-Desktop_Qt_5_12_12_MinGW_64_bit-Debug\debug\TCP_client.exe аварийно завершился.

вывод приложения сервер:
10:11:22: Запускается F:\Qt_project\5.0.2\lesons\Book\TCP_server\build-TCP_server-Desktop_Qt_5_12_12_MinGW_64_bit-Debug\debug\TCP_server.exe ...
10:13:44: F:\Qt_project\5.0.2\lesons\Book\TCP_server\build-TCP_server-Desktop_Qt_5_12_12_MinGW_64_bit-Debug\debug\TCP_server.exe завершился с кодом 0


Название: Re: программа зависает (Tcp network)
Отправлено: kambala от Февраль 12, 2023, 11:17
запустил у себя: так у тебя зависает (при запуске) из-за бесконечного цикла в SReadyRead(), судя по всему (смог лишь раз воспроизвести). можешь в этом удостовериться, запустив с отладкой (кнопка зеленого треугольника с жучком) и нажав на паузу во время зависания: отладчик покажет в каком месте кода находятся все потоки приложения.

отправка сообщения с клиента роняет сервер, проблема в строке myserver.cpp:64 (вероятно сокет является нулевым указателем).

P.S. сигнала returnPresed не существует, об этом сказано в выводе приложения.


Название: Re: программа зависает (Tcp network)
Отправлено: Noize_programmer от Февраль 12, 2023, 15:02
запустил у себя: так у тебя зависает (при запуске) из-за бесконечного цикла в SReadyRead(), судя по всему (смог лишь раз воспроизвести). можешь в этом удостовериться, запустив с отладкой (кнопка зеленого треугольника с жучком) и нажав на паузу во время зависания: отладчик покажет в каком месте кода находятся все потоки приложения.

отправка сообщения с клиента роняет сервер, проблема в строке myserver.cpp:64 (вероятно сокет является нулевым указателем).

P.S. сигнала returnPresed не существует, об этом сказано в выводе приложения.
спасибо за укозание на опечатку;

вот отладка:
(в client так же)


Название: Re: программа зависает (Tcp network)
Отправлено: kambala от Февраль 13, 2023, 10:54
похоже, что отладчик криво работает. можешь добавить qDebug() в разные места программы для понимания до какого места доходит.


Название: Re: программа зависает (Tcp network)
Отправлено: Noize_programmer от Февраль 14, 2023, 19:58
похоже, что отладчик криво работает. можешь добавить qDebug() в разные места программы для понимания до какого места доходит.
добавил;
вот дебаг клиента:
    0x7ffbfbf52af0                  cc                       int3
->0x7ffbfbf52af1  <+    1>        c3                       retq
    0x7ffbfbf52af2  <+    2>        cc                       int3
    0x7ffbfbf52af3  <+    3>        cc                       int3
    0x7ffbfbf52af4  <+    4>        cc                       int3
    0x7ffbfbf52af5  <+    5>        cc                       int3
    0x7ffbfbf52af6  <+    6>        cc                       int3
    0x7ffbfbf52af7  <+    7>        cc                       int3
    0x7ffbfbf52af8  <+    8>         0f 1f 84 00 00 00 00 00  nopl   0x0(%rax,%rax,1)


Название: Re: программа зависает (Tcp network)
Отправлено: Noize_programmer от Февраль 14, 2023, 20:39
похоже, что отладчик криво работает. можешь добавить qDebug() в разные места программы для понимания до какого места доходит.

всё я разобрался спаибо за ответы;
ошибка была в:
connect(m_pTcpSocket,SIGNAL(readyRead()),SLOT(SReadyRead()));