tiene - recuperar capacidad real de micro sd
Mira un rango de memoria en gdb? (2)
Estoy depurando un programa en gdb y quiero que el programa se detenga cuando se accede a la región de memoria 0x08049000 a 0x0804a000. Cuando intento establecer puntos de interrupción de memoria manualmente, gdb no parece admitir más de dos ubicaciones a la vez.
(gdb) awatch *0x08049000
Hardware access (read/write) watchpoint 1: *0x08049000
(gdb) awatch *0x08049001
Hardware access (read/write) watchpoint 2: *0x08049001
(gdb) awatch *0x08049002
Hardware access (read/write) watchpoint 3: *0x08049002
(gdb) run
Starting program: /home/iblue/git/some-code/some-executable
Warning:
Could not insert hardware watchpoint 3.
Could not insert hardware breakpoints:
You may have requested too many hardware breakpoints/watchpoints.
Ya hay una pregunta donde esto se ha preguntado y la respuesta fue, que es posible hacer esto con valgrind. Lamentablemente, la respuesta no contiene ningún ejemplo o referencia al manual valgrind, por lo que no fue muy claro: ¿cómo se puede usar gdb para observar cualquier cambio en una región completa de la memoria?
Entonces: ¿cómo puedo ver toda la región de la memoria?
La característica que detecta cuando una dirección de memoria ha cambiado se denomina punto de interrupción de hardware , y en realidad es una función de la CPU: un registro dentro del controlador de memoria que detecta cuándo se accede a una dirección específica y desencadena una interrupción de interrupción del depurador. Lamentablemente, la arquitectura x86 solo tiene cuatro de esos registros y es por eso que está limitado en la cantidad de puntos de interrupción de la memoria que puede establecer.
Es por eso que necesitas usar algo como valgrind; Si desea ver una región completa, debe hacerlo utilizando un software que simule los patrones de acceso a la memoria. Sin embargo, no sé si valgrind realmente admite ver rangos completos de memoria. Puede que tenga que parchearlo usted mismo. Modifique VALGRIND_MAKE_MEM_NOACCESS () para lanzar un punto de interrupción pero luego permita que el programa continúe, tal vez.
Si usa GDB 7.4 junto con Valgrind 3.7.0, entonces tiene puntos de control de hardware "emulados" ilimitados.
Inicie su programa en Valgrind, dando los argumentos --vgdb=full --vgdb-error=0
luego use GDB para conectarse a él ( target remote | vgdb
). Entonces puede, por ejemplo, watch
o watch
o rwatch
un rango de memoria haciendo rwatch (char[100]) *0x5180040
Consulte el manual de usuario de Valgrind en la integración de gdb para obtener más detalles.