Как следовать за вилками, но отсоединиться от exec в gdb - PullRequest
0 голосов
/ 12 июня 2019

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

Сложность имеет значение, ошибка возникает только в производстве, и только несколько раз в день. И ошибка возникает в веб-сервере Python, называемом gunicorn, который является предварительным форк-сервером. Разрушение происходит в одном из рабочих детей, а не в главном процессе.

Проблема в том, что по умолчанию GDB не будет отлаживать дочерние элементы, созданные fork(). Если он настроен для этого с set detach-on-fork off, то он может отлаживать рабочие процессы, но он также отлаживает другие подпроцессы, если один из рабочих выполняет fork() и exec().

Так есть ли способ настроить GDB на:

  • отладка дочерних процессов, создаваемых fork(), и
  • отсоединиться от процесса, когда он exec()?

Или, может быть, есть какой-то другой подход к проблеме отладки рабочих потомков сервера перед вилкой?

...