Article View: pl.comp.lang.c
Article #310549Jak wysterować gdb z własnego prog.?
From: 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
Technical Details
Message-ID:
<lahf72Fh3jaU1@mid.individual.net>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!fu-berlin.de!uni-berlin.de!individual.net!not-for-mailShow Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Jacek Marcin Jaworski <jaworski1978@adres.pl> Newsgroups: pl.comp.lang.c Subject: Jak wysterować gdb z własnego prog.? Date: Tue, 14 May 2024 17:44:36 +0200 Lines: 58 Message-ID: <lahf72Fh3jaU1@mid.individual.net> Mime-Version: 1.0 X-Trace: individual.net ggp9xuKrzvZRnz5A7Ohc1w8hjO5LIWxfW8hKVaqp5pgEInCfRj Cancel-Lock: sha1:fd7WgRxuhkkn6+6Bwo/bbZUwAfY= sha256:3gYJHofF2ZaKV3TjGzI1nLgMtid24a09qblfAeQABYM= User-Agent: Mozilla Thunderbird Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit