c gdb embedded arm

Señal recibida programa SIGTRAP, traza/trampa de punto de interrupción



gdb embedded (4)

Estoy depurando una pieza de software (integrado). He establecido un punto de interrupción en una función, y por alguna razón, una vez que alcancé ese punto de interrupción y continue , siempre vuelvo a la función (que es una función de inicialización a la que solo se debe llamar una vez). Cuando quito el punto de interrupción y continue , GDB me dice:

Program received signal SIGTRAP, Trace/breakpoint trap.

Como trabajé con puntos de interrupción, asumo que caí en una "trampa de punto de interrupción". ¿Qué es una trampa de punto de interrupción?


La captura de punto de interrupción solo significa que el procesador ha alcanzado un punto de interrupción. Hay dos posibilidades por las que esto está sucediendo. Lo más probable es que su código de inicialización esté siendo afectado porque su CPU se está reiniciando y está llegando al punto de interrupción nuevamente. La otra posibilidad sería que el código donde se establece el punto de interrupción se ejecute realmente en lugares distintos a la inicialización. A veces, con la optimización agresiva del compilador puede ser difícil saber exactamente a qué código corresponden sus mapas de punto de interrupción y qué rutas de ejecución pueden llegar allí.


La otra posibilidad que se me ocurre es:

1.Su proceso está ejecutando más de un hilo .

Por ejemplo - 2 diga x & y.

2. El hilo y llega al punto de ruptura, pero ha adjuntado gdb al hilo x.

Este caso es una trampa de traza / punto de interrupción.


Si usa V BAT como suministro de respaldo y sus unidades de voltaje de respaldo inferiores a 1.65 V, entonces tendrá el mismo problema después de conectarse a un suministro de energía.

En este caso, debe desconectar todas las fuentes de alimentación y volver a conectarse con el nivel de voltaje correcto. Entonces el problema con la depuración desaparece.


Tengo este problema ejecutando el proyecto de Linux en Visual Studio 2015 y depurando de forma remota. Mi solución es project_properties -> Propiedades de configuración -> Depuración -> Modo de depuración y cambia el valor de "gdbserver" a "gdb"