es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El proyecto de Python/PyCharm produce un fallo de segmentación en el modo de depuración, pero no en el modo de ejecución.

Curiosamente, en modo de depuración, si el script se detiene (mediante un punto de interrupción) donde normalmente ocurriría el error de segmentación (sin el punto de interrupción) y luego se reanuda, la falla de segmentación no ocurrirá. Muy extraño, ¿verdad?

Este proyecto utiliza pycharm y pygame. El sistema operativo es windows 10. Este proyecto contiene ~1500 líneas de código en 8 módulos, y la depuración funcionaba muy bien hasta ahora.

El error de segmentación no ocurre al ejecutar el script normalmente (no en modo de depuración). Aquí está la salida de la terminal cuando ocurre un error de segfault:

“`
Fatal Python error: pygame_parachute: (paracaídas de pygame) Error de segmentación
Estado de ejecución de Python: inicializado

<h1>otros hilos aquí</h1>

Hilo 0x0000490c (llamada más reciente primero):
… una larga traza de pila
Hilo 0x00002c98 (llamada más reciente primero):
… una larga traza de pila
Hilo 0x000048ec (llamada más reciente primero):
… una larga traza de pila

Hilo actual 0x000020d0 (llamada más reciente primero):
Archivo "C:\Users\Solaire\PycharmProjects\Game2\ai.py", línea 60 en función<em>do</em>ai
<strong>Archivo "C:/Users/Solaire/PycharmProjects/Game2/main.py", línea 45 en módulo></strong>
Archivo "C:\Program Files\JetBrains\PyCharm Community Edition 2021.2.2\plugins\python-ce\helpers\pydev_pydevimps_pydev_execfile.py", línea 18 en execfile
Archivo "C:\Program Files\JetBrains\PyCharm Community Edition 2021.2.2\plugins\python-ce\helpers\pydev\pydevd.py", línea 1483 en _exec
Módulos de extensión:
…muchas extensiones…

Proceso finalizado con código de salida -1073740791 (0xC0000409)
“`

La única cosa que se me ocurre de inmediato es el uso de barras inclinadas hacia adelante para el módulo main.py. El marco de pila debajo de él parece considerar nombres de archivo:


#ejecutar el script (nota: es importante compilar primero para tener el nombre de archivo establecido en modo de depuración)
exec(compile(contents+"\n", file, 'exec'), glob, loc)

¿Está el depurador obteniendo el nombre de archivo equivocado? Esa es la única pista que tengo. Soy nuevo en el desarrollo de Python. Incluso si no tienes una respuesta completa, cualquier ayuda/consejo sería muy apreciado.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Análisis de un error de segmentación en el código de Python

    Un error de segmentación ocurre cuando un programa intenta acceder a una ubicación de memoria a la que no tiene permiso de acceder. En el contexto de Python, un error de segmentación puede ocurrir por diversas razones, como una fuga de memoria, una asignación incorrecta de memoria, desbordamiento de la pila o acceso a memoria después de que ha sido liberada.

    En el escenario presentado, está ocurriendo un error de segmentación al ejecutar un código de Python utilizando Pycharm y pygame. Curiosamente, el error de segmentación no ocurre al ejecutar el código normalmente, sino solo en el modo de depuración. Además, si se detiene el código en el lugar donde se espera que ocurra el error de segmentación y se reanuda, el error no se produce.

    Una posible razón de este comportamiento podría ser el uso de barras diagonales para el módulo main.py. El marco de la pila por debajo de él considera los nombres de archivo, y es posible que el depurador esté obteniendo el nombre de archivo incorrecto.

    Dado que el código contiene 1500 líneas distribuidas en 8 módulos, podría haber numerosas otras razones para el error de segmentación. Como experto en tecnologías de la información especializado en Python, depuración, Pycharm y errores de segmentación, es importante realizar un análisis exhaustivo del código e identificar la causa raíz del problema.

    Una posible estrategia podría ser utilizar las herramientas de depuración de Pycharm para rastrear el problema. Esto podría implicar establecer más puntos de interrupción y recorrer el código paso a paso, examinar la traza de la pila, revisar el uso y la asignación de memoria, y verificar si hay algún error o advertencia. Además, sería útil revisar el código en busca de posibles errores, como fugas de memoria o desbordamientos de la pila.

    En resumen, si bien no está claro cuál es la causa exacta del error de segmentación en el escenario dado, se requiere una investigación y análisis más detallados del código utilizando herramientas de depuración y revisión de código para identificar y resolver el problema.

Comments are closed.