C 如何在GDB中的文件上设置一个监视点,使其在文件被修改时中断?

C 如何在GDB中的文件上设置一个监视点,使其在文件被修改时中断?,c,gdb,C,Gdb,在调试我的程序时,我想观察程序对文件所做的更改,我想让调试器告诉我什么时候会发生 我正在调试一个创建或修改某些文件(比如文本文件)的程序。一个文件可以在程序中的多个位置修改,并且可以多次修改。修改的顺序很重要。我正在寻找一种在文件上设置观察点的方法,就像在变量上设置一样。基本上,我希望程序在文件被修改时中断,这样我就可以分析文件内容并进一步观察程序。有办法做到这一点吗?我认为你不可能轻易做到这一点。这是一个新奇的概念,至少我从未听说过 文件通常不是由调试器理解和管理的“范围”中的内容,因此无法告

在调试我的程序时,我想观察程序对文件所做的更改,我想让调试器告诉我什么时候会发生


我正在调试一个创建或修改某些文件(比如文本文件)的程序。一个文件可以在程序中的多个位置修改,并且可以多次修改。修改的顺序很重要。我正在寻找一种在文件上设置观察点的方法,就像在变量上设置一样。基本上,我希望程序在文件被修改时中断,这样我就可以分析文件内容并进一步观察程序。有办法做到这一点吗?

我认为你不可能轻易做到这一点。这是一个新奇的概念,至少我从未听说过

文件通常不是由调试器理解和管理的“范围”中的内容,因此无法告诉调试器这样做。此外,它也不完全是单步/调试模型在后台的工作方式,因为文件是一个相当高级的概念,一旦文件到达特定地址,中断依赖于停止执行


您需要在所有对相关文件执行I/O操作的函数中设置条件断点,并以某种方式提出一个条件,仅过滤出您感兴趣的文件。

我可以想到两种方法:

  • 为读/写函数设置一个条件断点,该条件断点将在指定的文件描述符/文件指针上中断

  • 为记录文件描述符活动的读/写系统调用编写包装器,并使用
    LD_PRELOAD
    将其作为共享库加载


在fprintf/write或任何用于写入文件的函数上设置断点。或者为这些函数实现一个包装器并添加日志记录。但这将完全破坏frprintf。它不会是特定于文件的。我希望它只对我想要观察的特定文件中断,或者您需要检测文件何时被实际修改(使用
write
ftruncate
WriteFile
,等等),或者在调用缓冲稍后可能写入文件的数据的库例程时中断(
fprintf
fputs
fwrite
)?如果是后者,并且您使用的是stdio函数,那么在
文件
结构的某些元素上放置一个监视点(尽管不可移植),可能是最简单的方法。您使用的是什么操作系统?