🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

9 total messages Started by Jacek Marcin Jaworski Tue, 14 May 2024 15:44
Jak wysterować gdb z własnego prog.?
#310549
Author: Jacek Marcin Jaworski
Date: Tue, 14 May 2024 15:44
58 lines
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.?
#310550
Author: Jacek Marcin Jaworski
Date: Tue, 14 May 2024 15:51
5 lines
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.?
#310552
Author: heby
Date: Tue, 14 May 2024 19:07
8 lines
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.?
#310548
Author: Jacek Marcin Jaworski
Date: Wed, 15 May 2024 20:23
16 lines
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.?
#310556
Author: heby
Date: Thu, 16 May 2024 19:52
23 lines
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.?
#310545
Author: Jacek Marcin Jaworski
Date: Thu, 16 May 2024 21:20
20 lines
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.?
#310546
Author: heby
Date: Thu, 16 May 2024 21:30
21 lines
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.?
#310547
Author: Jacek Marcin Jaworski
Date: Fri, 17 May 2024 11:34
20 lines
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.?
#310557
Author: heby
Date: Sat, 18 May 2024 11:30
5 lines
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