Thread View: pl.comp.lang.c
9 messages
9 total messages
Started by Jacek Marcin Jaworski
Tue, 14 May 2024 15:44
Jak wysterować gdb z własnego prog.?
Author: Jacek Marcin Jaworski
Date: Tue, 14 May 2024 15:44
Date: Tue, 14 May 2024 15:44
58 lines
2936 bytes
2936 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 Jaworski
Date: Tue, 14 May 2024 15:51
Date: Tue, 14 May 2024 15:51
5 lines
1048 bytes
1048 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 19:07
Date: Tue, 14 May 2024 19:07
8 lines
1323 bytes
1323 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 Jaworski
Date: Wed, 15 May 2024 20:23
Date: Wed, 15 May 2024 20:23
16 lines
1338 bytes
1338 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 19:52
Date: Thu, 16 May 2024 19:52
23 lines
1967 bytes
1967 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 Jaworski
Date: Thu, 16 May 2024 21:20
Date: Thu, 16 May 2024 21:20
20 lines
1720 bytes
1720 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 21:30
Date: Thu, 16 May 2024 21:30
21 lines
1870 bytes
1870 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 Jaworski
Date: Fri, 17 May 2024 11:34
Date: Fri, 17 May 2024 11:34
20 lines
1891 bytes
1891 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 11:30
Date: Sat, 18 May 2024 11:30
5 lines
1465 bytes
1465 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