Cómo detener un programa en gdb al escribir en un archivo en particular conocido por su nombre

How can I set a breakpoint in gdb to stop program at every write to a particular file known by its name?

preguntado el 08 de noviembre de 11 a las 11:11

1 Respuestas

You can get GDB to stop on every write llamada al sistema con catch syscall write.

Como write operates on file descriptors, and not on named files, you can't make this breakpoint conditional on the name; you'll have to find out the file descriptor that corresponds to your "interesting" file first.

On Linux, you can look at ls -l /proc/<pid>/fd/* to associate file descriptors with names.

Other systems may have lsof, or other system-specific mechanisms for doing the same.

Once you have the file descriptor, you can make the catch conditional (so GDB stops only when that particular file is written). The exact details of how to do that differ between operating systems and processors, and you didn't supply either.

respondido 08 nov., 11:19

catch syscall write works fine: Catchpoint 2 (call to syscall 'write'), 0x0000003137cc6070 in __write_nocancel () from /lib64/libc.so.6 How to get the file descriptor in gdb? - agnonchik

Which part of "details differ between the OS and the processor, and you didn't say what you are using" didn't you understand? You probablemente are using Linux / x86_64, but you could be using something else, and I'd rather not waste time on a solution that wouldn't work for you. - Ruso empleado

OK, on my 64-bit system, I can use the rdi register that miraculously contains the file descriptor number. Just figured out from enlace - agnonchik

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.