¿Cuál es la diferencia entre el comando hbreak y break en gdb?


Respuesta 1:

Hay dos formas básicas de establecer puntos de interrupción en su código.

El primer tipo, más común, es un "punto de interrupción de software". Cuando le pide al depurador que establezca un punto de interrupción en una determinada declaración, encontrará la primera instrucción de ensamblaje asociada con esa declaración. Luego reemplazará esta instrucción con una instrucción diferente y especial que, cuando se ejecute, causará que el control se transfiera del debugee (el programa que se está depurando) al depurador.

El segundo tipo es un "punto de interrupción de hardware". Esto requiere un soporte de hardware más especializado. Con puntos de interrupción de hardware, el depurador configura la CPU para transferir el control al depurador cuando se ejecuta una instrucción en una dirección determinada. Tenga en cuenta que esto significa que no necesitamos cambiar la instrucción en sí, solo necesitamos saber la dirección.

El comando "break" de gdb establecerá un punto de interrupción, pero no se compromete con el tipo de punto de interrupción que se establecerá. "Hbreak", por otro lado, siempre usará un punto de interrupción de hardware. Por lo tanto, siempre debe usar break, a menos que sepa que necesita específicamente un punto de interrupción de hardware, y también sepa que gdb no podrá resolverlo por sí solo.

¿Cuándo necesitarías uno? Para la mayoría de las personas, la respuesta es probablemente nunca. Pero hay una excepción. Acabamos de decir que usar un punto de interrupción de hardware significa que no es necesario cambiar el código. Entonces, si por alguna razón el código simplemente no se puede cambiar, por ejemplo, si reside en la memoria de solo lectura, un punto de interrupción de hardware es prácticamente su única opción.

Tenga en cuenta que hay un concepto relacionado llamado puntos de observación de hardware que es mucho más útil. Pero esos no están configurados con hbreak. Por el contrario, al igual que con break, debe usar el comando "watch", y gdb decidirá qué tipo de punto de vigilancia usará, hardware o software.