Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

254
Vistas
¿Cómo 'etiquetar' una ubicación en un archivo fuente C para una definición de punto de interrupción posterior?

Problema: quiero poder colocar diferentes "etiquetas" potencialmente únicas o repetidas en mi código C, de modo que pueda usarlas en gdb para crear puntos de interrupción.

Trabajo similar:

  • Breakpoints to line-numbers: La principal diferencia con los breakpoints en las líneas fuente es que si el código anterior a la etiqueta se modifica de tal manera que da como resultado más o menos líneas, una referencia a la etiqueta seguirá siendo semánticamente correcta, una referencia a la línea fuente no lo haría.

  • Etiquetas: vengo de mi pregunta anterior, ¿Cómo decirle a gcc que mantenga mis etiquetas no utilizadas? , en el que preconcebí la idea de que la respuesta era insertar etiquetas. Luego de una discusión con miembros expertos de la plataforma, me enseñaron que los nombres de las etiquetas no se conservan después de la compilación. El compilador elimina las etiquetas que no se usan en C.

  • Inyectar etiquetas asm: relacionado con el enfoque anterior, si inyecto código asm en la fuente C, surgen ciertos problemas debido a las funciones en línea, las optimizaciones del compilador y la falta de alcance. Esto hace que este enfoque no sea robusto.

  • Definir una función ficticia: en esta otra pregunta, establecer el punto de interrupción de GDB en el archivo C , hay un enfoque interesante, en el que se puede colocar una función "ficticia" en el código y luego agregar un punto de interrupción a la llamada de función. El problema con este enfoque es que la definición de dicha función debe replicarse para cada etiqueta diferente.

¿Hay una mejor solución para lograr esto? ¿O un ángulo diferente para atacar el problema presentado?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

El uso de puntos de sonda SDT (trazado definido estáticamente) parece satisfacer todos los requisitos.

La documentación de GDB enlaza con ejemplos de cómo definir las sondas.

Ejemplo de uso : (gdb) break -probe-stap my_probe (esto debería estar documentado en la sección de puntos de interrupción de GDB , pero actualmente no lo está).

over 4 years ago · Santiago Trujillo Denunciar

0

Puede crear una variable ficticia y establecerla en diferentes valores. Entonces puede usar puntos de observación condicionales. Ejemplo:

 #include <stdio.h> static volatile int loc; int main() { loc = 1; puts("hello world"); loc = 2; return 0; }

 (gdb) watch loc if loc == 2 Hardware watchpoint 1: loc (gdb) r Starting program: /tmp/a.out hello world Hardware watchpoint 1: loc Old value = 1 New value = 2 main () at test.c:8 8 return 0;

Por supuesto, puede envolver la tarea en una macro para que solo la obtenga en compilaciones de depuración. Se aplican las advertencias habituales: las optimizaciones y la inserción pueden verse afectadas.

over 4 years ago · Santiago Trujillo Denunciar

0

Use python para buscar en un archivo de origen algunas etiquetas predefinidas y establezca puntos de interrupción allí:

 def break_on_labels(source, label): """add breakpoint on each SOURCE line containing LABEL""" with open(source) as file: l = 0 for line in file: l = l + 1 if label in line: gdb.Breakpoint(source=source, line=l) main_file = gdb.lookup_global_symbol("main").symtab.fullname() break_on_labels(main_file, "BREAK-HERE")

Ejemplo:

 int main(void) { int a = 15; a = a + 23; // BREAK-HERE return a; }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda