powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Можно ли узнать из за какого потока было убито приложение?
55 сообщений из 55, показаны все 3 страниц
Можно ли узнать из за какого потока было убито приложение?
    #34296045
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересует linux.

Если происходит критическая ошибка, то приложение вываливается с Killed. Как можно узнать из-за какого pid это произошло. Опции компиляци? Средства?
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34296080
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кто узнавать будет ?
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34296185
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)кто узнавать будет ?

Я узнавать буду где у меня глючит.
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34296422
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhИнтересует linux.

Если происходит критическая ошибка, то приложение вываливается с Killed. Как можно узнать из-за какого pid это произошло. Опции компиляци? Средства?

Посмотрите man ptrace, wait, waitpid .

По контексту вопроса не ясно , что используестя fork или pthread_create.

ptrace должен помочь, но не благодарное это дело писать свой дебагер.
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34296508
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat- AkhИнтересует linux.

Если происходит критическая ошибка, то приложение вываливается с Killed. Как можно узнать из-за какого pid это произошло. Опции компиляци? Средства?

Посмотрите man ptrace, wait, waitpid .

По контексту вопроса не ясно , что используестя fork или pthread_create.

ptrace должен помочь, но не благодарное это дело писать свой дебагер.

pthread_create

Вот именно, что свой дебагер не благодарное дело писать.

Я не пойму, почему когда приложение убивается не пишется причина, или хотябы источник причины (pid из за которого произошла смерть). Может как-то это можно "включить"?
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34296627
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh onstat- AkhИнтересует linux.

Если происходит критическая ошибка, то приложение вываливается с Killed. Как можно узнать из-за какого pid это произошло. Опции компиляци? Средства?

Посмотрите man ptrace, wait, waitpid .

По контексту вопроса не ясно , что используестя fork или pthread_create.

ptrace должен помочь, но не благодарное это дело писать свой дебагер.

pthread_create

Вот именно, что свой дебагер не благодарное дело писать.

Я не пойму, почему когда приложение убивается не пишется причина, или хотябы источник причины (pid из за которого произошла смерть). Может как-то это можно "включить"?

GDB должен строчку говорить где это произошло.
Ну а дальше по обстоятельствам.
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34296731
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-GDB должен строчку говорить где это произошло.
Ну а дальше по обстоятельствам.

Он нормально тянет много-(в районе десятка)-потоковое приложение?
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34296979
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhЯ не пойму, почему когда приложение убивается не пишется причина, или хотябы источник причины (pid из за которого произошла смерть). Может как-то это можно "включить"?хочешь сделать красивое окошечко «отправить ачот в микросакс»?
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34297055
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh onstat-GDB должен строчку говорить где это произошло.
Ну а дальше по обстоятельствам.

Он нормально тянет много-(в районе десятка)-потоковое приложение?

Если чесно, не знаю.
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34297168
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat- Akh onstat-GDB должен строчку говорить где это произошло.
Ну а дальше по обстоятельствам.

Он нормально тянет много-(в районе десятка)-потоковое приложение?

Если чесно, не знаю.

ОК. Напорюсь еще раз на глюки обязательно попробую.
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34297379
A. Fig Lee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая разница, он же core будет смотреть - труп программы (gdb)
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34298153
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A. Fig LeeКакая разница, он же core будет смотреть - труп программы (gdb)

Это мне даст информацию о потоке?
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34299785
A. Fig Lee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh A. Fig LeeКакая разница, он же core будет смотреть - труп программы (gdb)

Это мне даст информацию о потоке?


где здесь:

Akh
Он нормально тянет много-(в районе десятка)-потоковое приложение?

про информацию о потоке?
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34299823
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A. Fig Lee Akh A. Fig LeeКакая разница, он же core будет смотреть - труп программы (gdb)

Это мне даст информацию о потоке?


где здесь:

Akh
Он нормально тянет много-(в районе десятка)-потоковое приложение?

про информацию о потоке?

Свалится не дойдя до "нужного" места.
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34299837
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собсна, прошу по теме, без под%%%ок, если я правельно понял Афигли.
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34300305
A. Fig Lee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhСобсна, прошу по теме, без под%%%ок, если я правельно понял Афигли.

если смотреть core - где там потоки? Ето мемори и стек дамп. Потоки когда живую программу дебагишь.
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34300361
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A. Fig Lee AkhСобсна, прошу по теме, без под%%%ок, если я правельно понял Афигли.

если смотреть core - где там потоки? Ето мемори и стек дамп. Потоки когда живую программу дебагишь.

Hint: Некоторое количество стеков( по количеству нитей на момент падения).
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34300397
A. Fig Lee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat- A. Fig Lee AkhСобсна, прошу по теме, без под%%%ок, если я правельно понял Афигли.

если смотреть core - где там потоки? Ето мемори и стек дамп. Потоки когда живую программу дебагишь.

Hint: Некоторое количество стеков( по количеству нитей на момент падения).

и что? он "поймет" если их 2, но "не поймет" - если 10?
Вопрос то был - потянет ли gdb 10 потоков?
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34301071
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какой менеджер потоки/процессы убивает?
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34301348
!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
!
Гость
AkhА какой менеджер потоки/процессы убивает?

ядро.

man kill
man signal
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34301577
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
! AkhА какой менеджер потоки/процессы убивает?

ядро.

man kill
man signal

Пошутил что ли? Ясное дело, что не mc.

Когда убивается поток, то в текущую консоль выкидывается сообщение, что он убит. Кто кидет это сообщение? Мененджер потоков? Как его зовут? Где в ядре он находится?

Так постоновка понятна?
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34301694
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh ! AkhА какой менеджер потоки/процессы убивает?

ядро.

man kill
man signal

Пошутил что ли? Ясное дело, что не mc.

Когда убивается поток, то в текущую консоль выкидывается сообщение, что он убит. Кто кидет это сообщение? Мененджер потоков? Как его зовут? Где в ядре он находится?

Так постоновка понятна?

Процесс родитель ловит сигнал SIGCHLD в обработчике делает wait | waitpid
которые вычитывают причины завершения процесса из структур ядра.

man 7 signal
Signal Value Action Comment
-------------------------------------------------------------
SIGCHLD 20,17,18 Ign Child stopped or terminated


Обрати внимание, что по умолчанию он игнорируется.
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34301842
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-
Процесс родитель ловит сигнал SIGCHLD в обработчике делает wait | waitpid
которые вычитывают причины завершения процесса из структур ядра.

man 7 signal
Signal Value Action Comment
-------------------------------------------------------------
SIGCHLD 20,17,18 Ign Child stopped or terminated


Обрати внимание, что по умолчанию он игнорируется.

Не канает:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
void *f(void *) {
    char *p= 0 ;

    printf("Child pid=%d\n", getpid());
    (*p)= 5 ;

    return NULL;
};

void fsig(int sig) {
    int pid;
    int status;

    printf("Signal %d\n", sig);
    pid=wait(&status);
    printf("%d(pid) exited.\n", pid);
}

int main () {
    printf("Main pid=%d\n", getpid());

    if (SIG_ERR==signal(SIGCHLD, fsig)) {
        printf("Signal error!\n");
        exit(- 1 );
    };

    pthread_t t;
    pthread_create(&t, NULL, f, NULL);
    sleep( 1 );

    return  0 ;
}


автор
Main pid=4072
Child pid=4074
Killed
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34301903
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh

Не канает:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
.....................................
void fsig(int sig) {
    int pid;
    int status;

    printf("Signal %d\n", sig);
    pid=wait(&status);
    printf("%d(pid) exited.\n", pid);
}

.......................
    pthread_t t;
    pthread_create(&t, NULL, f, NULL);
............
}


[quot автор]
Main pid=4072
Child pid=4074
Killed


Издеваешься?
Или лень дочитать до конца?

man 2 wait
In the Linux kernel, a kernel-scheduled thread is not a distinct con-
struct from a process. Instead, a thread is simply a process that is
created using the Linux-unique clone(2) system call; other routines
such as the portable pthread_create(3) call are implemented using
clone(2). Before Linux 2.4, a thread was just a special case of a
process, and as a consequence one thread could not wait on the chil-
dren of another thread, even when the latter belongs to the same
thread group. However, POSIX prescribes such functionality, and since
Linux 2.4 a thread can, and by default will, wait on children of other
threads in the same thread group.

The following Linux-specific options are for use with children created
using clone(2).



з.ы. Сам я это еще не пробовал.
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34302045
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже я не прав с последним постом.
Вероятнее всего, что процесс со всеми нитями прибивается целяком,
и перехваты просто не успевают отработать.
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34302084
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-Похоже я не прав с последним постом.
Вероятнее всего, что процесс со всеми нитями прибивается целяком,
и перехваты просто не успевают отработать.

Да, наверное, SIGKILL, который нельзя перехватить, срубает сразу всю группу задач.
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34302136
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообщем, наметилось 3 пути для поиска:
1) С помощью отладчика/трассировщика, который бы сообщал какой поток/в каком месте сейчас ворочается дело.
2) Программным путем. Здесь без шансов, так как прехватить ничего нельзя.
3) Менеджер задач.

Есть мысли?
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34302154
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В исходниках ядра по слову "Killed" ничего подходящего не нашел.
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34302268
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhВ исходниках ядра по слову "Killed" ничего подходящего не нашел.

Killed пишет шелл из которого запущено приложение.
см. предидущие посты.
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34303596
A. Fig Lee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чето вы братцы не туда зарулили мне кается..

Сигнал Килл сам по себе не появляется, ето ответ на чтото.

Короче, добавьте сигнал хендлер на SIGSEGV и прочие сигналы которые валят программу.
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34305580
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Действительно сингнал SIGSEGV генерится, но

Код: plaintext
1.
2.
3.
    pid=wait(&status);
//и
    pid=waitpid(- 1 , &status, WUNTRACED);

генерит ошибку об отсутсвии дочерних процессов.
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34307563
A. Fig Lee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhДействительно сингнал SIGSEGV генерится, но

Код: plaintext
1.
2.
3.
    pid=wait(&status);
//и
    pid=waitpid(- 1 , &status, WUNTRACED);

генерит ошибку об отсутсвии дочерних процессов.

а они при чем? Надо в самой программе ловить в хендлере
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34308176
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я что делаю?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
void *f(void *) {
    char *p= 0 ;
    char buf[ 2 ];
    int bufLen= 1024 ;

    printf("Child pid=%d\n", getpid());
    for (int i= 0  ; i< 100  ; i++) {
        p = (char*)(i* 1245 + 1245 );
        printf("read from memory %p\n", p);
        memcpy(buf, p, bufLen);
        sleep( 1 );
    };

    return NULL;
};

void fsig(int sig) {
    int pid;
    int status;

    printf("Signal %d\n", sig);
    pid=wait(&status);
//    pid=waitpid(-1, &status, WUNTRACED);

    if (pid!=- 1 ) {
        printf("%d(pid) exited.\n", pid);

        if (WIFEXITED(status)) {
            printf("syccess witch return code %d\n", WEXITSTATUS(status));
            exit (- 1 );
        }

        if (WIFSIGNALED(status)) {
            printf("child is killed by signal %d\n", WTERMSIG(status));
            exit (- 1 );
        }

        if (WIFSTOPPED(status)) {
            printf("child is stopped by signal %d\n", WSTOPSIG(status));
            exit (- 1 );
        }
    } else {
        int err=errno;
        printf("wait returned error %d\n", errno);
        printf("%s\n", strerror(err));
        exit (- 1 );
    }


    exit (- 1 );
}

int main () {
    printf("Main pid=%d\n", getpid());

    if (SIG_ERR==signal(SIGCHLD, fsig)) {
        printf("Signal error!\n");
        exit(- 1 );
    };
    if (SIG_ERR==signal(SIGSEGV, fsig)) {
        printf("Signal error!\n");
        exit(- 1 );
    };

    pthread_t t;
    pthread_attr_t              attr;
    struct sched_param  sp;
    pthread_attr_init(&attr);

    pthread_attr_getschedparam(&attr, &sp);
    pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);
    pthread_attr_setschedpolicy(&attr, SCHED_FIFO);
    sp.sched_priority = sched_get_priority_max(SCHED_FIFO);
    pthread_attr_setschedparam(&attr, &sp);
    pthread_create(&t, &attr, f, NULL);

    printf("main slepping.\n");
    sleep( 10 );
    printf("main returning.\n");

    return  0 ;
}
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34308324
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A. Fig Lee
а они при чем? Надо в самой программе ловить в хендлере



Имется ввиду что это

Akh
Код: plaintext
1.
2.
3.
4.
5.
    if (SIG_ERR==signal(SIGSEGV, fsig)) {
        printf("Signal error!\n");
        exit(- 1 );
    };



нужно вызывать в коде программы (нити) которая сигнал получает , а не в предке.

з.ы. Но ИМХО поймать конкретное место всеравно будет тяжело.
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34308424
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проведенные опыты показали, что где бы я не регестрил обработчик на SIGSEGV, он одинаково вызывается:
1) С pid дочернего процесса.
2) wait возвращает ошибку, что нет дочернего процесса.

Поэтому, мне кажется, логично сделать следующие выводы:
1) Обработчик сигнала регистрируется в рамках группы задач. По крайней мере SIGSEGV.
2) Обработчик вызывается при возникновении сигнала в окружении задачи, к которой пришел сигнал. Для всех сигналов.

Поэтому, для отслеживания потока, производящего нарушение доступа к памяти, достаточно в основном цикле подцепиться на SIGSERV и логгировать pid обработчика, который и будет являться pid-ом, потока совершившего нарушение доступа к памяти.

Верно?
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34308701
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhПроведенные опыты показали, что где бы я не регестрил обработчик на SIGSEGV, он одинаково вызывается:
1) С pid дочернего процесса.
2) wait возвращает ошибку, что нет дочернего процесса.

Поэтому, мне кажется, логично сделать следующие выводы:
1) Обработчик сигнала регистрируется в рамках группы задач. По крайней мере SIGSEGV.
2) Обработчик вызывается при возникновении сигнала в окружении задачи, к которой пришел сигнал. Для всех сигналов.

Поэтому, для отслеживания потока, производящего нарушение доступа к памяти, достаточно в основном цикле подцепиться на SIGSERV и логгировать pid обработчика, который и будет являться pid-ом, потока совершившего нарушение доступа к памяти.

Верно?

Я толькочто глянул сюда

Там написано:

Код: plaintext
автор
Thread operations include thread creation, termination, synchronization (joins,blocking), scheduling, data management and process interaction.
A thread does not maintain a list of created threads, nor does it know the thread that created it.
All threads within a process share the same address space.
Threads in the same process share:
Process instructions
Most data
open files (descriptors)
[ i]signals and signal handlers
current working directory
User and group id
Each thread has a unique:
Thread ID
set of registers, stack pointer
stack for local variables, return addresses
signal mask
priority
Return value: errno
pthread functions return "0" if OK.

Исходя из этого определить нить которая ведет себя неправильно путем отлова сигналов,
возможно при использовании маскирования сигналов во всех нитях кроме одной
(потенциально проблемной).

Думаю это всеравно тупиковый путь.
ИМХО ловить нужно не нить, а функцию где это происходит.
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34308807
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-...
Исходя из этого определить нить которая ведет себя неправильно путем отлова сигналов,
возможно при использовании маскирования сигналов во всех нитях кроме одной
(потенциально проблемной).

Думаю это всеравно тупиковый путь.
ИМХО ловить нужно не нить, а функцию где это происходит.

Что за маскирование? Не встречал. Какие функции помогут для понимания?

Отловить функцию сложнее, и я даже не предствляю как. Где увереность, что в этот момент другой поток не вызвал критическую ситуацию?

А что на счет того, что обработчик вышел с pid-ом, вызвавшего критическую ситуацию, потока?
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34309042
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh

Что за маскирование? Не встречал. Какие функции помогут для понимания?


sigaction, sigprocmask, sigpending, sigsuspend - POSIX signal handling functions

Akh
Отловить функцию сложнее, и я даже не предствляю как. Где увереность, что в этот момент другой поток не вызвал критическую ситуацию?


Давай двигаться от простого к сложному и от общего к часному.
Поверь это позволит очень сократить время на отладку кода.


man 2 signal
NOTES
The effects of this call in a multi-threaded process are unspecified.
The routine handler must be very careful, since processing elsewhere
was interrupted at some arbitrary point. POSIX has the concept of
"safe function". If a signal interrupts an unsafe function, and han-
dler calls an unsafe function, then the behavior is undefined.
Safe
functions are listed explicitly in the various standards. The POSIX
1003.1-2003 list is
_Exit() _exit() abort() accept() access() aio_error() aio_return()
aio_suspend() alarm() bind() cfgetispeed() cfgetospeed() cfsetispeed()
cfsetospeed() chdir() chmod() chown() clock_gettime() close() con-
nect() creat() dup() dup2() execle() execve() fchmod() fchown()
fcntl() fdatasync() fork() fpathconf() fstat() fsync() ftruncate()
getegid() geteuid() getgid() getgroups() getpeername() getpgrp() get-
pid() getppid() getsockname() getsockopt() getuid() kill() link() lis-
ten() lseek() lstat() mkdir() mkfifo() open() pathconf() pause()
pipe() poll() posix_trace_event() pselect() raise() read() readlink()
recv() recvfrom() recvmsg() rename() rmdir() select() sem_post()
send() sendmsg() sendto() setgid() setpgid() setsid() setsockopt()
setuid() shutdown() sigaction() sigaddset() sigdelset() sigemptyset()
sigfillset() sigismember() signal() sigpause() sigpending()
sigprocmask() sigqueue() sigset() sigsuspend() sleep() socket() socketpair()
stat() symlink() sysconf() tcdrain() tcflow() tcflush() tcgetattr()
tcgetpgrp() tcsendbreak() tcsetattr() tcsetpgrp() time()
timer_getoverrun() timer_gettime() timer_settime() times() umask()
uname() unlink() utime() wait() waitpid() write().

According to POSIX, the behaviour of a process is undefined after it
ignores a SIGFPE, SIGILL, or SIGSEGV signal that was not generated by
the kill(2) or the raise(3) functions.
Integer division by zero has
undefined result. On some architectures it will generate a SIGFPE
signal. (Also dividing the most negative integer by -1 may generate
SIGFPE.) Ignoring this signal might lead to an endless loop.


Особое внимание нужно обратить на использование защищенных функций при работе с потоками и строками.
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34310496
A. Fig Lee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бесполезно ето, как онстат говорит. надо месседжи дебаговые в функции вставлять.
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34311257
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A. Fig Leeбесполезно ето, как онстат говорит. надо месседжи дебаговые в функции вставлять.

Это трудоемкий процесс - раз.
Среди десятка мессаджей (десяток потоков) надо будет искать после которого произошла ошибка. Это два.

Я хочу знать какой поток совершил глупость. Потом совмещая с мессаджами, определять ошибку.

А что вы думаете на счет того, что обработчик вышел с pid-ом, вызвавшего критическую ситуацию, потока?
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34311447
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh

А что вы думаете на счет того, что обработчик вышел с pid-ом, вызвавшего критическую ситуацию, потока?

Не обязательно,
например: указатель мог испортить один, а упал тот, который потом по нему обратился.
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34311678
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat- Akh

А что вы думаете на счет того, что обработчик вышел с pid-ом, вызвавшего критическую ситуацию, потока?

Не обязательно,
например: указатель мог испортить один, а упал тот, который потом по нему обратился.

Ну, тут уже ничего не поделаешь... Важно, быть уверенным, что упал именно этот.
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34312151
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh onstat- Akh

А что вы думаете на счет того, что обработчик вышел с pid-ом, вызвавшего критическую ситуацию, потока?

Не обязательно,
например: указатель мог испортить один, а упал тот, который потом по нему обратился.

Ну, тут уже ничего не поделаешь... Важно, быть уверенным, что упал именно этот.

Если с маскированием сигналов ничего не получилось, то есть еще одна идея.

Завести поток арбитража, который сериализует выполнение нитей через мутексы, и ведет протокол очередности выполнения.


Если последовательное выполнение к падению не приводит, то нужно искать багу или проблему дизайна во взаимодейтсвии нитей.

Если приводит все будет понятно, кто последним запущен тот и виноват.
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34313677
A. Fig Lee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh A. Fig Leeбесполезно ето, как онстат говорит. надо месседжи дебаговые в функции вставлять.

Это трудоемкий процесс - раз.
Среди десятка мессаджей (десяток потоков) надо будет искать после которого произошла ошибка. Это два.

Я хочу знать какой поток совершил глупость. Потом совмещая с мессаджами, определять ошибку.

А что вы думаете на счет того, что обработчик вышел с pid-ом, вызвавшего критическую ситуацию, потока?

а смысл? если каждый поток исполняет тот же код? что ето даст?
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34313778
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A. Fig Lee Akh A. Fig Leeбесполезно ето, как онстат говорит. надо месседжи дебаговые в функции вставлять.

Это трудоемкий процесс - раз.
Среди десятка мессаджей (десяток потоков) надо будет искать после которого произошла ошибка. Это два.

Я хочу знать какой поток совершил глупость. Потом совмещая с мессаджами, определять ошибку.

А что вы думаете на счет того, что обработчик вышел с pid-ом, вызвавшего критическую ситуацию, потока?

а смысл? если каждый поток исполняет тот же код? что ето даст?

Это даст возможность локализовать проблему,
во взаимодействии нитей ( нити портят данные паралельной записью),
или все же проблема не зависит от нитей ( появляейтся и при последовательном выполнении).

з.ы. Мы сейчас начали обсуждать наличие кошки в темной комнате, даже не присутствуя там.
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34313790
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat- A. Fig Lee Akh A. Fig Leeбесполезно ето, как онстат говорит. надо месседжи дебаговые в функции вставлять.

Это трудоемкий процесс - раз.
Среди десятка мессаджей (десяток потоков) надо будет искать после которого произошла ошибка. Это два.

Я хочу знать какой поток совершил глупость. Потом совмещая с мессаджами, определять ошибку.

А что вы думаете на счет того, что обработчик вышел с pid-ом, вызвавшего критическую ситуацию, потока?

а смысл? если каждый поток исполняет тот же код? что ето даст?

Это даст возможность локализовать проблему,
во взаимодействии нитей ( нити портят данные паралельной записью),
или все же проблема не зависит от нитей ( появляейтся и при последовательном выполнении).

з.ы. Мы сейчас начали обсуждать наличие кошки в темной комнате, даже не присутствуя там.

Прошу прощения, не заметил что это ответ не мне.
Устал устал уже видимо за день.
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34314784
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A. Fig Lee Akh A. Fig Leeбесполезно ето, как онстат говорит. надо месседжи дебаговые в функции вставлять.

Это трудоемкий процесс - раз.
Среди десятка мессаджей (десяток потоков) надо будет искать после которого произошла ошибка. Это два.

Я хочу знать какой поток совершил глупость. Потом совмещая с мессаджами, определять ошибку.

А что вы думаете на счет того, что обработчик вышел с pid-ом, вызвавшего критическую ситуацию, потока?

а смысл? если каждый поток исполняет тот же код? что ето даст?

У меня обычная схема - взаимодействие классов, некоторые из которых имеют свои потоки. Стековая архитектура (по типу TCP/IP). Код выполняется разный, и кто-то (поток) может спороть ерунду. Если опредилить, кто это сделал, будет проще начать искать ошибку (функцию, потом действие, потом анализ ситуации, а потом уже анализ причин).
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34314801
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-Это даст возможность локализовать проблему,
во взаимодействии нитей ( нити портят данные паралельной записью),
или все же проблема не зависит от нитей ( появляейтся и при последовательном выполнении).

Первый вариант, мне, как правило, удается предусматривать архитектурно и аналитически.
Основная проблема - во втором варианте. Здесь причины бывают разные, вплоть до невнимательности и опечаток. Писать, же менеджер, выполняющий синхранизацию для последовательной работы, мне кажется слишком накладно. Тем более учитывая модульность архитектуры.

onstat-з.ы. Мы сейчас начали обсуждать наличие кошки в темной комнате, даже не присутствуя там.

Я хотел узнать, какой поток вызывает аварийное завершение приложения.
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34315178
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh onstat-Это даст возможность локализовать проблему,
во взаимодействии нитей ( нити портят данные паралельной записью),
или все же проблема не зависит от нитей ( появляейтся и при последовательном выполнении).

Первый вариант, мне, как правило, удается предусматривать архитектурно и аналитически.
Основная проблема - во втором варианте. Здесь причины бывают разные, вплоть до невнимательности и опечаток. Писать, же менеджер, выполняющий синхранизацию для последовательной работы, мне кажется слишком накладно. Тем более учитывая модульность архитектуры.

onstat-з.ы. Мы сейчас начали обсуждать наличие кошки в темной комнате, даже не присутствуя там.

Я хотел узнать, какой поток вызывает аварийное завершение приложения.

Дабы приоткрыть дверь в темную комнату, опубликуй пожалуйста здесь
вывод , который появится на экране после выполнения:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
$gdb  program_name
GNU gdb Red Hat Linux ( 6 . 3 . 0 . 0 - 0 .31rh)
Copyright  2004  Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu"...Using host libthread_db lib
rary "/lib/libthread_db.so.1".

(gdb) run


в результате должно получиться приблизительно следующее:

Код: plaintext
1.
2.
Program received signal SIGSEGV, Segmentation fault.
0x0017bcee in dummy()  from ......... 

Дальше будем смотреть.

з.ы. Это должно быть первым дествием после того как программа падает во время отладки.
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34315478
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-Дабы приоткрыть дверь в темную комнату, опубликуй пожалуйста здесь
вывод , который появится на экране после выполнения:

Нет сейчас никакого приложения, которое падает. Излечил в течении суток с момента задания вопроса. Сейчас интересует подход/средства по поставленному вопросу.
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34317167
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh onstat-Дабы приоткрыть дверь в темную комнату, опубликуй пожалуйста здесь
вывод , который появится на экране после выполнения:

Нет сейчас никакого приложения, которое падает. Излечил в течении суток с момента задания вопроса. Сейчас интересует подход/средства по поставленному вопросу.

по этому?

Akh
Первый вариант, мне, как правило, удается предусматривать архитектурно и аналитически.
Основная проблема - во втором варианте. Здесь причины бывают разные, вплоть до невнимательности и опечаток. Писать, же менеджер, выполняющий синхранизацию для последовательной работы, мне кажется слишком накладно. Тем более учитывая модульность архитектуры.


Конкрентый ответ дать тяжело.

Если в общем, то ИМХО при разработке модульной архитектуры,
желательно предусмотреть возможность трассировки модулей по отдельности.
И включения трассировки на лету путем посылки(обработки) сигналов (SIGUSR1 например).

Помимо этого я имею привычку заводить класс исключений(иногда и иерархию)
для отладочных целей
и бросаться исключениями направо и налево если предвидится
потенциально убойная ситуация.
(Класс исключения содержит в себе помимо всего прочего
номер строки и файл где, оно было инициировано).

Таким образом вопросы неоднозначного поведения(трактования задачи)
решаются с постановщиком или самостоятельно
еще на этапе первых запусков программы(модуля).

Где ловить эти исключения, зависит он контекста.
НО самое главное, там будет известно место, откуда оно пришло.
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34317238
A. Fig Lee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh A. Fig Lee Akh A. Fig Leeбесполезно ето, как онстат говорит. надо месседжи дебаговые в функции вставлять.

Это трудоемкий процесс - раз.
Среди десятка мессаджей (десяток потоков) надо будет искать после которого произошла ошибка. Это два.

Я хочу знать какой поток совершил глупость. Потом совмещая с мессаджами, определять ошибку.

А что вы думаете на счет того, что обработчик вышел с pid-ом, вызвавшего критическую ситуацию, потока?

а смысл? если каждый поток исполняет тот же код? что ето даст?

У меня обычная схема - взаимодействие классов, некоторые из которых имеют свои потоки. Стековая архитектура (по типу TCP/IP). Код выполняется разный, и кто-то (поток) может спороть ерунду. Если опредилить, кто это сделал, будет проще начать искать ошибку (функцию, потом действие, потом анализ ситуации, а потом уже анализ причин).

Не понимаю. Потоки разные, но ходят по одним и тем же функциям или нет. Если да, то нет смысла ловить.

Вообще средствами скриптов не так уж сложно добавить в каждую функцию типа

Код: plaintext
1.
2.
3.
#ifdef DEBUG
  syslog()...
#endif
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34317278
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Резюме к моему последнему посту :

[ b]Поддержка и развитие большого проекта всегда обходится дороже разработки версии 1.0
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34317983
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-Если в общем, то ИМХО при разработке модульной архитектуры,
желательно предусмотреть возможность трассировки модулей по отдельности.
И включения трассировки на лету путем посылки(обработки) сигналов (SIGUSR1 например).

Помимо этого я имею привычку заводить класс исключений(иногда и иерархию)
для отладочных целей
и бросаться исключениями направо и налево если предвидится
потенциально убойная ситуация.
(Класс исключения содержит в себе помимо всего прочего
номер строки и файл где, оно было инициировано).

Таким образом вопросы неоднозначного поведения(трактования задачи)
решаются с постановщиком или самостоятельно
еще на этапе первых запусков программы(модуля).

Где ловить эти исключения, зависит он контекста.
НО самое главное, там будет известно место, откуда оно пришло.

1. учту. спасибо.
2. Использую. Не всегда хватает. Особенно не зная, какой поток облажался.
...
Рейтинг: 0 / 0
Можно ли узнать из за какого потока было убито приложение?
    #34317996
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A. Fig Lee Akh
У меня обычная схема - взаимодействие классов, некоторые из которых имеют свои потоки. Стековая архитектура (по типу TCP/IP). Код выполняется разный , и кто-то (поток) может спороть ерунду. Если опредилить, кто это сделал, будет проще начать искать ошибку (функцию, потом действие, потом анализ ситуации, а потом уже анализ причин).

Не понимаю. Потоки разные, но ходят по одним и тем же функциям или нет. Если да, то нет смысла ловить.

Вообще средствами скриптов не так уж сложно добавить в каждую функцию типа

Код: plaintext
1.
2.
3.
#ifdef DEBUG
  syslog()...
#endif


1. Выделил жирным.
2. Была такая мысль, когда-то. Но средствами скриптов отказался. Сейчас использую в ручную.
...
Рейтинг: 0 / 0
55 сообщений из 55, показаны все 3 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Можно ли узнать из за какого потока было убито приложение?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]