Thread View: pl.comp.lang.c
9 messages
9 total messages
Started by Jacek Marcin Jaw
Tue, 14 May 2024 17:44
Jak wysterować gdb z własnego prog.?
Author: Jacek Marcin Jaw
Date: Tue, 14 May 2024 17:44
Date: Tue, 14 May 2024 17:44
57 lines
2209 bytes
2209 bytes
Dzień dobry! Koduję dla siebie edytor programisty w w C++ z Qt. Teraz chcę wysterować gdb z mojego edytora programisty. Będzie to obejmowało gen. dwóch skryptów: 1. Skrypt który buduje prog. przygotowuje dane do uruchomienia testowego, uruchamia gdb z prog. i uruchamia skrypt sprzątający. 2. Skrypt który konf. gdb (pułapki i te sprawy). Obecnie mam zakodowany generator skryptu 1. Przykładowy wygenerowany skrypt wygląda tak: #!/bin/bash ############################################################################ # Obsługa błędów: set -e set -u set -o pipefail trap ">&2 echo 'BŁĄD wykonanie przerwane!'; exit 1;" SIGINT SIGTERM trap '>&2 echo "BŁĄD: $? w lini: $LINENO"' ERR ############################################################################ # Uruchom: cd $HOME/+EnergoKod/energo-tekstprofan-4 energo-budowa.sh $HOME/+EnergoKod/energo-tekstprofan-4/skrypty/kopiuj-wtyczki.sh cd $HOME/+EnergoKod/energo-tekstprofan-4/testy-dane gdb $HOME/+EnergoKod/energo-tekstprofan-4/budowa/tekstprofan/tekstprofan4 cd $HOME/+EnergoKod/energo-tekstprofan-4 # Tu skrypt 1. się kończy Ten skrypt uruchamiam QProcess::startDetached. Co gwarantuje, że nie jest używany fork (co by zamykało okno mojego edytora). Jednak wygląda tak jakby przy uruchomieniu skryptu 1. wywoływany gdb zawieszał mój edytor tekstu. W prog. śledzącym na stosie wywołań wygląda to tak, że wiesza się kod bibl. Qt odpowiedzialny za obsługę zdarzenia w wyniku którego ma być odrysowane okno (lub jego fragment). Na stackoverflow.com omawiają ten problem w odp. z d. 2016-06-15, śro. (publikacja): https://stackoverflow.com/questions/38404925/gdb-interrupt-running-process-without-killing-child-processes Piszą tam coś o sygnałach sys. Uniks. Jednak dodanie po utworzeniu o. kl. QApplication (i przed wej. w pętlę zdarzeń): signal(SIGQUIT, SIG_IGN); signal(SIGINT, SIG_IGN); signal(SIGTERM, SIG_IGN); signal(SIGHUP, SIG_IGN); czyli kodu który ignoruje te problematyczne sygnały, nic nie zmienia i mój edytor dalej jest zawieszany. Co można zrobić żeby uruchamiany gdb nie ubijał mojego edytora programisty? Miłego dnia! Jacek Marcin Jaworski
Re: Jak wysterować gdb z własnego prog.?
Author: Jacek Marcin Jaw
Date: Tue, 14 May 2024 17:51
Date: Tue, 14 May 2024 17:51
4 lines
274 bytes
274 bytes
W dniu 14.05.2024 o 17:44, Jacek Marcin Jaworski pisze: > Ten skrypt uruchamiam QProcess::startDetached. Co gwarantuje, że nie > jest używany fork (co by zamykało okno mojego edytora). Jak się zastanowiłem, to myślę że raczej fork by nie zamknął mojego edytora.
Re: Jak wysterować gdb z własnego prog.?
Author: heby
Date: Tue, 14 May 2024 21:07
Date: Tue, 14 May 2024 21:07
7 lines
289 bytes
289 bytes
On 14/05/2024 17:44, Jacek Marcin Jaworski wrote: > Co można zrobić żeby uruchamiany gdb nie ubijał mojego edytora programisty? Po pierwsze, używaj wątków do komunikacji. Po drugie, zainteresuj się rurkami do komunikacji z procesem potomnym. Po trzecie: zainteresuj się GDB/MI.
Re: Jak wysterować gdb z własnego prog.?
Author: Jacek Marcin Jaw
Date: Wed, 15 May 2024 22:23
Date: Wed, 15 May 2024 22:23
15 lines
527 bytes
527 bytes
W dniu 14.05.2024 o 21:07, heby pisze: > On 14/05/2024 17:44, Jacek Marcin Jaworski wrote: >> Co można zrobić żeby uruchamiany gdb nie ubijał mojego edytora >> programisty? > > Po pierwsze, używaj wątków do komunikacji. > > Po drugie, zainteresuj się rurkami do komunikacji z procesem potomnym. > > Po trzecie: zainteresuj się GDB/MI. Obawiam się, że nie załapałeś idei, bo nie czytasz ze zrozumieniem. Nic z tego co podałeś nie jest mi potrzebne w tym przypadku. Może ktoś inny pomoże? Pomożecie?!?
Re: Jak wysterować gdb z własnego prog.?
Author: heby
Date: Thu, 16 May 2024 21:52
Date: Thu, 16 May 2024 21:52
23 lines
895 bytes
895 bytes
On 15/05/2024 22:23, Jacek Marcin Jaworski wrote: >> Po pierwsze, używaj wątków do komunikacji. >> Po drugie, zainteresuj się rurkami do komunikacji z procesem potomnym. >> Po trzecie: zainteresuj się GDB/MI. > Obawiam się, że nie załapałeś idei, bo nie czytasz ze zrozumieniem. Czytam z dostatecznym zrozumieniem. Problem z "zawieszającym" się Qt jest gdzie indziej. Pisałem komercyjny debugger w Qt uzywający GDB jako engine i takie problemy najzwyczajniej nie istnieją. > Nic > z tego co podałeś nie jest mi potrzebne w tym przypadku. Szybko się przekonasz, że to dobre rady. Ale, jak to zazwyczaj bywa, trzeba samemu zrobic fuckup, aby pojąc radę kolegi który już to przechodził. > Może ktoś inny pomoże? > Pomożecie?!? Masz mocno niszowy problem. Zgaduje że jestem jedyny na grupie, który ma doświadczenia w sterowani gdb z poziomu Qt. Powodzenia!
Re: Jak wysterować gdb z własnego prog.?
Author: Jacek Marcin Jaw
Date: Thu, 16 May 2024 23:20
Date: Thu, 16 May 2024 23:20
19 lines
838 bytes
838 bytes
W dniu 16.05.2024 o 21:52, heby pisze: > On 15/05/2024 22:23, Jacek Marcin Jaworski wrote: >>> Po pierwsze, używaj wątków do komunikacji. >>> Po drugie, zainteresuj się rurkami do komunikacji z procesem potomnym. >>> Po trzecie: zainteresuj się GDB/MI. >> Obawiam się, że nie załapałeś idei, bo nie czytasz ze zrozumieniem. > > Czytam z dostatecznym zrozumieniem. > > Problem z "zawieszającym" się Qt jest gdzie indziej. Pisałem komercyjny > debugger w Qt uzywający GDB jako engine i takie problemy najzwyczajniej > nie istnieją. Ale ja nie piszę IDE! Ja nie chcę żadnego engine gdb. Nie chcę żadnej komunikacji gdb z moim edytorem. Ja chcę tylko uruchomić gdb z zadaną konfiguracją - interesuje mnie opcja z man gdb: -command=file -x file Wywołaj komendy GDB z pliku file.
Re: Jak wysterować gdb z własnego prog.?
Author: heby
Date: Thu, 16 May 2024 23:30
Date: Thu, 16 May 2024 23:30
20 lines
689 bytes
689 bytes
On 16/05/2024 23:20, Jacek Marcin Jaworski wrote: > Ale ja nie piszę IDE! Jestś pewny? On 14/05/2024 17:44, Jacek Marcin Jaworski wrote: > Koduję dla siebie edytor programisty w w C++ z Qt. Teraz chcę wysterować > gdb z mojego edytora programisty. Brzmi jak IDE. > Ja nie chcę żadnego engine gdb. Jeszcze nie chcesz. > komunikacji gdb z moim edytorem. Ja chcę tylko uruchomić gdb z zadaną > konfiguracją - interesuje mnie opcja z man gdb: Może zamiast gdb sprawdź jak działa dowolny inny proces. Buga masz gdzie indziej i raczej nie ma on związku z gdb. Coś źle robisz z QProcess, lub ogólnie coś źle robisz, skoro głupie użycie fork zamyka Ci aplikację.
Re: Jak wysterować gdb z własnego prog.?
Author: Jacek Marcin Jaw
Date: Fri, 17 May 2024 13:34
Date: Fri, 17 May 2024 13:34
19 lines
943 bytes
943 bytes
W dniu 16.05.2024 o 23:30, heby pisze: > Może zamiast gdb sprawdź jak działa dowolny inny proces. Buga masz gdzie > indziej i raczej nie ma on związku z gdb. Coś źle robisz z QProcess, lub > ogólnie coś źle robisz, skoro głupie użycie fork zamyka Ci aplikację. Już mam! Robiłem coś takiego: 1. Kompilowałem mój edytor; 2. Uruchamiałem z go lokalnie; 3. Uruchamiałem z niego skrypt budowania (tego samego proj.); 4. Podczas budowania zmieniał się exe na dysku; 5. Uruchomiony w p. 2. edytor nagle zawieszał się. Pojawia się pyt.: Czemu zapis do pliku exe dokładnie tak samo kompilowanego prog. powoduje zawieszenie prog.? Bo wiem, że prog. ładuje się dynamicznie, w miarę potrzeb, ładując kol. s. po 4KB (zwykle). Ale kod prog. się nie zmieniał ani użyte narzędzia. Usuwanie pliku exe z dysku też nie jest wytłumaczeniem, bo przecież wtedy otwarte pliki nie są usuwane do momentu ich zamknięcia.
Re: Jak wysterować gdb z własnego prog.?
Author: heby
Date: Sat, 18 May 2024 13:30
Date: Sat, 18 May 2024 13:30
4 lines
217 bytes
217 bytes
On 17/05/2024 13:34, Jacek Marcin Jaworski wrote: > Czemu zapis do pliku exe dokładnie tak samo kompilowanego prog. powoduje > zawieszenie prog.? Jesteś pewny, że zapisywałeś exe pliku, który był uruchomiony?
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads