🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

9 total messages Started by Jacek Marcin Jaw Tue, 14 May 2024 17:44
Jak wysterować gdb z własnego prog.?
#291875
Author: Jacek Marcin Jaw
Date: Tue, 14 May 2024 17:44
57 lines
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.?
#291936
Author: Jacek Marcin Jaw
Date: Tue, 14 May 2024 17:51
4 lines
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.?
#291876
Author: heby
Date: Tue, 14 May 2024 21:07
7 lines
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.?
#291877
Author: Jacek Marcin Jaw
Date: Wed, 15 May 2024 22:23
15 lines
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.?
#291937
Author: heby
Date: Thu, 16 May 2024 21:52
23 lines
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.?
#291878
Author: Jacek Marcin Jaw
Date: Thu, 16 May 2024 23:20
19 lines
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.?
#291879
Author: heby
Date: Thu, 16 May 2024 23:30
20 lines
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.?
#291880
Author: Jacek Marcin Jaw
Date: Fri, 17 May 2024 13:34
19 lines
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.?
#291881
Author: heby
Date: Sat, 18 May 2024 13:30
4 lines
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