|
|
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
onstat-Похоже я не прав с последним постом. Вероятнее всего, что процесс со всеми нитями прибивается целяком, и перехваты просто не успевают отработать. Да, наверное, SIGKILL, который нельзя перехватить, срубает сразу всю группу задач. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 13:22 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
Вообщем, наметилось 3 пути для поиска: 1) С помощью отладчика/трассировщика, который бы сообщал какой поток/в каком месте сейчас ворочается дело. 2) Программным путем. Здесь без шансов, так как прехватить ничего нельзя. 3) Менеджер задач. Есть мысли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 13:31 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
В исходниках ядра по слову "Killed" ничего подходящего не нашел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 13:34 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
AkhВ исходниках ядра по слову "Killed" ничего подходящего не нашел. Killed пишет шелл из которого запущено приложение. см. предидущие посты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 13:56 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
чето вы братцы не туда зарулили мне кается.. Сигнал Килл сам по себе не появляется, ето ответ на чтото. Короче, добавьте сигнал хендлер на SIGSEGV и прочие сигналы которые валят программу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 19:52 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
Действительно сингнал SIGSEGV генерится, но Код: plaintext 1. 2. 3. генерит ошибку об отсутсвии дочерних процессов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 10:35 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
AkhДействительно сингнал SIGSEGV генерится, но Код: plaintext 1. 2. 3. генерит ошибку об отсутсвии дочерних процессов. а они при чем? Надо в самой программе ловить в хендлере ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 19:29 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
А я что делаю? Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2007, 09:46 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
A. Fig Lee а они при чем? Надо в самой программе ловить в хендлере Имется ввиду что это Akh Код: plaintext 1. 2. 3. 4. 5. нужно вызывать в коде программы (нити) которая сигнал получает , а не в предке. з.ы. Но ИМХО поймать конкретное место всеравно будет тяжело. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2007, 10:28 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
Проведенные опыты показали, что где бы я не регестрил обработчик на SIGSEGV, он одинаково вызывается: 1) С pid дочернего процесса. 2) wait возвращает ошибку, что нет дочернего процесса. Поэтому, мне кажется, логично сделать следующие выводы: 1) Обработчик сигнала регистрируется в рамках группы задач. По крайней мере SIGSEGV. 2) Обработчик вызывается при возникновении сигнала в окружении задачи, к которой пришел сигнал. Для всех сигналов. Поэтому, для отслеживания потока, производящего нарушение доступа к памяти, достаточно в основном цикле подцепиться на SIGSERV и логгировать pid обработчика, который и будет являться pid-ом, потока совершившего нарушение доступа к памяти. Верно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2007, 10:52 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
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. Исходя из этого определить нить которая ведет себя неправильно путем отлова сигналов, возможно при использовании маскирования сигналов во всех нитях кроме одной (потенциально проблемной). Думаю это всеравно тупиковый путь. ИМХО ловить нужно не нить, а функцию где это происходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2007, 11:53 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
onstat-... Исходя из этого определить нить которая ведет себя неправильно путем отлова сигналов, возможно при использовании маскирования сигналов во всех нитях кроме одной (потенциально проблемной). Думаю это всеравно тупиковый путь. ИМХО ловить нужно не нить, а функцию где это происходит. Что за маскирование? Не встречал. Какие функции помогут для понимания? Отловить функцию сложнее, и я даже не предствляю как. Где увереность, что в этот момент другой поток не вызвал критическую ситуацию? А что на счет того, что обработчик вышел с pid-ом, вызвавшего критическую ситуацию, потока? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2007, 12:16 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
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. Особое внимание нужно обратить на использование защищенных функций при работе с потоками и строками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2007, 12:58 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
бесполезно ето, как онстат говорит. надо месседжи дебаговые в функции вставлять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2007, 18:59 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
A. Fig Leeбесполезно ето, как онстат говорит. надо месседжи дебаговые в функции вставлять. Это трудоемкий процесс - раз. Среди десятка мессаджей (десяток потоков) надо будет искать после которого произошла ошибка. Это два. Я хочу знать какой поток совершил глупость. Потом совмещая с мессаджами, определять ошибку. А что вы думаете на счет того, что обработчик вышел с pid-ом, вызвавшего критическую ситуацию, потока? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 09:44 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
Akh А что вы думаете на счет того, что обработчик вышел с pid-ом, вызвавшего критическую ситуацию, потока? Не обязательно, например: указатель мог испортить один, а упал тот, который потом по нему обратился. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 10:30 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
onstat- Akh А что вы думаете на счет того, что обработчик вышел с pid-ом, вызвавшего критическую ситуацию, потока? Не обязательно, например: указатель мог испортить один, а упал тот, который потом по нему обратился. Ну, тут уже ничего не поделаешь... Важно, быть уверенным, что упал именно этот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 11:11 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
Akh onstat- Akh А что вы думаете на счет того, что обработчик вышел с pid-ом, вызвавшего критическую ситуацию, потока? Не обязательно, например: указатель мог испортить один, а упал тот, который потом по нему обратился. Ну, тут уже ничего не поделаешь... Важно, быть уверенным, что упал именно этот. Если с маскированием сигналов ничего не получилось, то есть еще одна идея. Завести поток арбитража, который сериализует выполнение нитей через мутексы, и ведет протокол очередности выполнения. Если последовательное выполнение к падению не приводит, то нужно искать багу или проблему дизайна во взаимодейтсвии нитей. Если приводит все будет понятно, кто последним запущен тот и виноват. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 12:31 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
Akh A. Fig Leeбесполезно ето, как онстат говорит. надо месседжи дебаговые в функции вставлять. Это трудоемкий процесс - раз. Среди десятка мессаджей (десяток потоков) надо будет искать после которого произошла ошибка. Это два. Я хочу знать какой поток совершил глупость. Потом совмещая с мессаджами, определять ошибку. А что вы думаете на счет того, что обработчик вышел с pid-ом, вызвавшего критическую ситуацию, потока? а смысл? если каждый поток исполняет тот же код? что ето даст? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 17:57 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
A. Fig Lee Akh A. Fig Leeбесполезно ето, как онстат говорит. надо месседжи дебаговые в функции вставлять. Это трудоемкий процесс - раз. Среди десятка мессаджей (десяток потоков) надо будет искать после которого произошла ошибка. Это два. Я хочу знать какой поток совершил глупость. Потом совмещая с мессаджами, определять ошибку. А что вы думаете на счет того, что обработчик вышел с pid-ом, вызвавшего критическую ситуацию, потока? а смысл? если каждый поток исполняет тот же код? что ето даст? Это даст возможность локализовать проблему, во взаимодействии нитей ( нити портят данные паралельной записью), или все же проблема не зависит от нитей ( появляейтся и при последовательном выполнении). з.ы. Мы сейчас начали обсуждать наличие кошки в темной комнате, даже не присутствуя там. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 18:26 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
onstat- A. Fig Lee Akh A. Fig Leeбесполезно ето, как онстат говорит. надо месседжи дебаговые в функции вставлять. Это трудоемкий процесс - раз. Среди десятка мессаджей (десяток потоков) надо будет искать после которого произошла ошибка. Это два. Я хочу знать какой поток совершил глупость. Потом совмещая с мессаджами, определять ошибку. А что вы думаете на счет того, что обработчик вышел с pid-ом, вызвавшего критическую ситуацию, потока? а смысл? если каждый поток исполняет тот же код? что ето даст? Это даст возможность локализовать проблему, во взаимодействии нитей ( нити портят данные паралельной записью), или все же проблема не зависит от нитей ( появляейтся и при последовательном выполнении). з.ы. Мы сейчас начали обсуждать наличие кошки в темной комнате, даже не присутствуя там. Прошу прощения, не заметил что это ответ не мне. Устал устал уже видимо за день. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 18:29 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
A. Fig Lee Akh A. Fig Leeбесполезно ето, как онстат говорит. надо месседжи дебаговые в функции вставлять. Это трудоемкий процесс - раз. Среди десятка мессаджей (десяток потоков) надо будет искать после которого произошла ошибка. Это два. Я хочу знать какой поток совершил глупость. Потом совмещая с мессаджами, определять ошибку. А что вы думаете на счет того, что обработчик вышел с pid-ом, вызвавшего критическую ситуацию, потока? а смысл? если каждый поток исполняет тот же код? что ето даст? У меня обычная схема - взаимодействие классов, некоторые из которых имеют свои потоки. Стековая архитектура (по типу TCP/IP). Код выполняется разный, и кто-то (поток) может спороть ерунду. Если опредилить, кто это сделал, будет проще начать искать ошибку (функцию, потом действие, потом анализ ситуации, а потом уже анализ причин). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 10:03 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
onstat-Это даст возможность локализовать проблему, во взаимодействии нитей ( нити портят данные паралельной записью), или все же проблема не зависит от нитей ( появляейтся и при последовательном выполнении). Первый вариант, мне, как правило, удается предусматривать архитектурно и аналитически. Основная проблема - во втором варианте. Здесь причины бывают разные, вплоть до невнимательности и опечаток. Писать, же менеджер, выполняющий синхранизацию для последовательной работы, мне кажется слишком накладно. Тем более учитывая модульность архитектуры. onstat-з.ы. Мы сейчас начали обсуждать наличие кошки в темной комнате, даже не присутствуя там. Я хотел узнать, какой поток вызывает аварийное завершение приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 10:08 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
Akh onstat-Это даст возможность локализовать проблему, во взаимодействии нитей ( нити портят данные паралельной записью), или все же проблема не зависит от нитей ( появляейтся и при последовательном выполнении). Первый вариант, мне, как правило, удается предусматривать архитектурно и аналитически. Основная проблема - во втором варианте. Здесь причины бывают разные, вплоть до невнимательности и опечаток. Писать, же менеджер, выполняющий синхранизацию для последовательной работы, мне кажется слишком накладно. Тем более учитывая модульность архитектуры. onstat-з.ы. Мы сейчас начали обсуждать наличие кошки в темной комнате, даже не присутствуя там. Я хотел узнать, какой поток вызывает аварийное завершение приложения. Дабы приоткрыть дверь в темную комнату, опубликуй пожалуйста здесь вывод , который появится на экране после выполнения: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. в результате должно получиться приблизительно следующее: Код: plaintext 1. 2. Дальше будем смотреть. з.ы. Это должно быть первым дествием после того как программа падает во время отладки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 11:49 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
onstat-Дабы приоткрыть дверь в темную комнату, опубликуй пожалуйста здесь вывод , который появится на экране после выполнения: Нет сейчас никакого приложения, которое падает. Излечил в течении суток с момента задания вопроса. Сейчас интересует подход/средства по поставленному вопросу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 12:47 |
|
||
|
|

start [/forum/topic.php?fid=57&startmsg=34302084&tid=2029477]: |
0ms |
get settings: |
5ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 383ms |

| 0 / 0 |
