Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

272
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!