|
|
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
Интересует linux. Если происходит критическая ошибка, то приложение вываливается с Killed. Как можно узнать из-за какого pid это произошло. Опции компиляци? Средства? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 13:42 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
кто узнавать будет ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 13:50 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)кто узнавать будет ? Я узнавать буду где у меня глючит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 14:13 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
AkhИнтересует linux. Если происходит критическая ошибка, то приложение вываливается с Killed. Как можно узнать из-за какого pid это произошло. Опции компиляци? Средства? Посмотрите man ptrace, wait, waitpid . По контексту вопроса не ясно , что используестя fork или pthread_create. ptrace должен помочь, но не благодарное это дело писать свой дебагер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 14:59 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
onstat- AkhИнтересует linux. Если происходит критическая ошибка, то приложение вываливается с Killed. Как можно узнать из-за какого pid это произошло. Опции компиляци? Средства? Посмотрите man ptrace, wait, waitpid . По контексту вопроса не ясно , что используестя fork или pthread_create. ptrace должен помочь, но не благодарное это дело писать свой дебагер. pthread_create Вот именно, что свой дебагер не благодарное дело писать. Я не пойму, почему когда приложение убивается не пишется причина, или хотябы источник причины (pid из за которого произошла смерть). Может как-то это можно "включить"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 15:17 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
Akh onstat- AkhИнтересует linux. Если происходит критическая ошибка, то приложение вываливается с Killed. Как можно узнать из-за какого pid это произошло. Опции компиляци? Средства? Посмотрите man ptrace, wait, waitpid . По контексту вопроса не ясно , что используестя fork или pthread_create. ptrace должен помочь, но не благодарное это дело писать свой дебагер. pthread_create Вот именно, что свой дебагер не благодарное дело писать. Я не пойму, почему когда приложение убивается не пишется причина, или хотябы источник причины (pid из за которого произошла смерть). Может как-то это можно "включить"? GDB должен строчку говорить где это произошло. Ну а дальше по обстоятельствам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 15:41 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
onstat-GDB должен строчку говорить где это произошло. Ну а дальше по обстоятельствам. Он нормально тянет много-(в районе десятка)-потоковое приложение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 16:00 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
AkhЯ не пойму, почему когда приложение убивается не пишется причина, или хотябы источник причины (pid из за которого произошла смерть). Может как-то это можно "включить"?хочешь сделать красивое окошечко «отправить ачот в микросакс»? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 16:56 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
Akh onstat-GDB должен строчку говорить где это произошло. Ну а дальше по обстоятельствам. Он нормально тянет много-(в районе десятка)-потоковое приложение? Если чесно, не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 17:08 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
onstat- Akh onstat-GDB должен строчку говорить где это произошло. Ну а дальше по обстоятельствам. Он нормально тянет много-(в районе десятка)-потоковое приложение? Если чесно, не знаю. ОК. Напорюсь еще раз на глюки обязательно попробую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 17:37 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
Какая разница, он же core будет смотреть - труп программы (gdb) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 18:44 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
A. Fig LeeКакая разница, он же core будет смотреть - труп программы (gdb) Это мне даст информацию о потоке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2007, 09:56 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
Akh A. Fig LeeКакая разница, он же core будет смотреть - труп программы (gdb) Это мне даст информацию о потоке? где здесь: Akh Он нормально тянет много-(в районе десятка)-потоковое приложение? про информацию о потоке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2007, 16:38 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
A. Fig Lee Akh A. Fig LeeКакая разница, он же core будет смотреть - труп программы (gdb) Это мне даст информацию о потоке? где здесь: Akh Он нормально тянет много-(в районе десятка)-потоковое приложение? про информацию о потоке? Свалится не дойдя до "нужного" места. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2007, 16:47 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
Собсна, прошу по теме, без под%%%ок, если я правельно понял Афигли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2007, 16:51 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
AkhСобсна, прошу по теме, без под%%%ок, если я правельно понял Афигли. если смотреть core - где там потоки? Ето мемори и стек дамп. Потоки когда живую программу дебагишь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2007, 19:19 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
A. Fig Lee AkhСобсна, прошу по теме, без под%%%ок, если я правельно понял Афигли. если смотреть core - где там потоки? Ето мемори и стек дамп. Потоки когда живую программу дебагишь. Hint: Некоторое количество стеков( по количеству нитей на момент падения). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2007, 19:51 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
onstat- A. Fig Lee AkhСобсна, прошу по теме, без под%%%ок, если я правельно понял Афигли. если смотреть core - где там потоки? Ето мемори и стек дамп. Потоки когда живую программу дебагишь. Hint: Некоторое количество стеков( по количеству нитей на момент падения). и что? он "поймет" если их 2, но "не поймет" - если 10? Вопрос то был - потянет ли gdb 10 потоков? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2007, 20:16 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
А какой менеджер потоки/процессы убивает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 09:54 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
AkhА какой менеджер потоки/процессы убивает? ядро. man kill man signal ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 11:06 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
! AkhА какой менеджер потоки/процессы убивает? ядро. man kill man signal Пошутил что ли? Ясное дело, что не mc. Когда убивается поток, то в текущую консоль выкидывается сообщение, что он убит. Кто кидет это сообщение? Мененджер потоков? Как его зовут? Где в ядре он находится? Так постоновка понятна? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 11:43 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
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 Обрати внимание, что по умолчанию он игнорируется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 12:04 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
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. автор Main pid=4072 Child pid=4074 Killed ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 12:34 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
Akh Не канает: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. [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). з.ы. Сам я это еще не пробовал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 12:48 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
Похоже я не прав с последним постом. Вероятнее всего, что процесс со всеми нитями прибивается целяком, и перехваты просто не успевают отработать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2007, 13:14 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
Akh onstat-Дабы приоткрыть дверь в темную комнату, опубликуй пожалуйста здесь вывод , который появится на экране после выполнения: Нет сейчас никакого приложения, которое падает. Излечил в течении суток с момента задания вопроса. Сейчас интересует подход/средства по поставленному вопросу. по этому? Akh Первый вариант, мне, как правило, удается предусматривать архитектурно и аналитически. Основная проблема - во втором варианте. Здесь причины бывают разные, вплоть до невнимательности и опечаток. Писать, же менеджер, выполняющий синхранизацию для последовательной работы, мне кажется слишком накладно. Тем более учитывая модульность архитектуры. Конкрентый ответ дать тяжело. Если в общем, то ИМХО при разработке модульной архитектуры, желательно предусмотреть возможность трассировки модулей по отдельности. И включения трассировки на лету путем посылки(обработки) сигналов (SIGUSR1 например). Помимо этого я имею привычку заводить класс исключений(иногда и иерархию) для отладочных целей и бросаться исключениями направо и налево если предвидится потенциально убойная ситуация. (Класс исключения содержит в себе помимо всего прочего номер строки и файл где, оно было инициировано). Таким образом вопросы неоднозначного поведения(трактования задачи) решаются с постановщиком или самостоятельно еще на этапе первых запусков программы(модуля). Где ловить эти исключения, зависит он контекста. НО самое главное, там будет известно место, откуда оно пришло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 18:42 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
Akh A. Fig Lee Akh A. Fig Leeбесполезно ето, как онстат говорит. надо месседжи дебаговые в функции вставлять. Это трудоемкий процесс - раз. Среди десятка мессаджей (десяток потоков) надо будет искать после которого произошла ошибка. Это два. Я хочу знать какой поток совершил глупость. Потом совмещая с мессаджами, определять ошибку. А что вы думаете на счет того, что обработчик вышел с pid-ом, вызвавшего критическую ситуацию, потока? а смысл? если каждый поток исполняет тот же код? что ето даст? У меня обычная схема - взаимодействие классов, некоторые из которых имеют свои потоки. Стековая архитектура (по типу TCP/IP). Код выполняется разный, и кто-то (поток) может спороть ерунду. Если опредилить, кто это сделал, будет проще начать искать ошибку (функцию, потом действие, потом анализ ситуации, а потом уже анализ причин). Не понимаю. Потоки разные, но ходят по одним и тем же функциям или нет. Если да, то нет смысла ловить. Вообще средствами скриптов не так уж сложно добавить в каждую функцию типа Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 19:05 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
Резюме к моему последнему посту : [ b]Поддержка и развитие большого проекта всегда обходится дороже разработки версии 1.0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2007, 19:17 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
onstat-Если в общем, то ИМХО при разработке модульной архитектуры, желательно предусмотреть возможность трассировки модулей по отдельности. И включения трассировки на лету путем посылки(обработки) сигналов (SIGUSR1 например). Помимо этого я имею привычку заводить класс исключений(иногда и иерархию) для отладочных целей и бросаться исключениями направо и налево если предвидится потенциально убойная ситуация. (Класс исключения содержит в себе помимо всего прочего номер строки и файл где, оно было инициировано). Таким образом вопросы неоднозначного поведения(трактования задачи) решаются с постановщиком или самостоятельно еще на этапе первых запусков программы(модуля). Где ловить эти исключения, зависит он контекста. НО самое главное, там будет известно место, откуда оно пришло. 1. учту. спасибо. 2. Использую. Не всегда хватает. Особенно не зная, какой поток облажался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2007, 10:06 |
|
||
|
Можно ли узнать из за какого потока было убито приложение?
|
|||
|---|---|---|---|
|
#18+
A. Fig Lee Akh У меня обычная схема - взаимодействие классов, некоторые из которых имеют свои потоки. Стековая архитектура (по типу TCP/IP). Код выполняется разный , и кто-то (поток) может спороть ерунду. Если опредилить, кто это сделал, будет проще начать искать ошибку (функцию, потом действие, потом анализ ситуации, а потом уже анализ причин). Не понимаю. Потоки разные, но ходят по одним и тем же функциям или нет. Если да, то нет смысла ловить. Вообще средствами скриптов не так уж сложно добавить в каждую функцию типа Код: plaintext 1. 2. 3. 1. Выделил жирным. 2. Была такая мысль, когда-то. Но средствами скриптов отказался. Сейчас использую в ручную. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2007, 10:09 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2029477]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
187ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
103ms |
get tp. blocked users: |
1ms |
| others: | 224ms |
| total: | 565ms |

| 0 / 0 |
