Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

272
Visualizações
reduzca el tamaño de la pila en la sesión de depuración para detectar la recursividad sin fin

Tengo un algoritmo que "a veces" no rompió la recursividad y termina en un desbordamiento de pila. Ahora quiero depurar esa situación. gdb me dirige directamente a la línea donde sobrescribo el borde de la pila, pero es imposible obtener un seguimiento de la pila porque gdb necesita un tiempo interminable para desenrollar la pila y mostrarla en ddd.

Ahora simplemente quiero reducir el tamaño de la pila para obtener la corrupción mucho antes. Así que necesito una forma de reducir a pila para mi tarea en ejecución. No hay subprocesos involucrados, por lo que no debería ser un gran problema.

Pero no tengo idea si gdb en sí tiene una opción para manipular la pila (tamaño) por sí mismo o si necesito cambiar el tamaño mediante programación al inicio de mi prog o tal vez pueda reducir el tamaño desde la línea de comando os (linux) después de iniciar el sesión de depuración.

Tal vez también sea posible la detención si el árbol de llamadas alcanza una profundidad máxima si gdb tiene esa opción.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Intente usar ulimit -s (stack_size) en el shell donde ejecuta su programa o puede hacerlo mediante programación Cambie el tamaño de la pila para una aplicación C++ en Linux durante la compilación con el compilador GNU

EDITAR:

Podemos escribir un programa simple similar a nohup, que se envía SIGSTOP a sí mismo y luego ejecuta sus argumentos. Llamémoslo runpaused

 //runpaused.c #include <signal.h> #include <unistd.h> int main(int argc, char **argv) { raise(SIGSTOP); return execvp(argv[1], argv+1); }

Entonces, podemos hacer las siguientes cosas: compilar runpaused

 $ gcc runpaused.c -o runpaused

límite de pila para el shell actual

 $ ulimit -s 32

ejecute nuestro programa a través de runpaused, use sh como ejemplo

 $ ./runpaused sh -c "echo Hello"

Desde otra terminal: encuentre su PID

 $ ps -ef | grep -v grep | grep runpaused

carga gdb con nuestro programa

 $ gdb $(which sh)

adjuntar a PID

 (gdb) attach PID

enviar señal SIGCONT desde gdb

 (gdb) signal SIGCONT

continuar la ejecución del programa desde gdb

 (gdb) continue

Después de varias veces de continuar, obtenemos lo que queremos.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda