Article View: pl.comp.lang.c
Article #291875Jak wysterować gdb z własnego prog.?
From: 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
Message-ID:
<lahf72Fh3jaU1@mid.individual.net>
Path:
polish.pugleaf.net!archive.newsdeef.eu!archive!mbox2nntp-news0158.bag!news.gallaxial.com!news.uni-stuttgart.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail