如何在GDB中打印C语言程序通过fopen打开的文件内容
在GDB中查看fopen打开的文件内容的实现方法
首先编译你的C代码时需要添加-g参数保留调试信息,示例编译命令如下:gcc -g test.c -o test
其中test.c为你给出的示例代码文件。
操作步骤
- 启动GDB加载可执行文件:
gdb ./test - 在fopen执行完成后的位置设置断点,你可以选择在fclose所在行打断点:
- 按行号打断点(假设fclose在代码第7行):
break 7 - 按函数打断点:
break fclose
- 按行号打断点(假设fclose在代码第7行):
- 运行程序:
run,程序执行到断点位置会自动暂停,此时file指针已经指向成功打开的文件。
两种查看文件内容的方法
方法1:通过FILE指针调用标准库函数读取(无需已知文件路径)
这种方法直接使用当前已经打开的FILE指针操作,不需要关心文件的实际路径:
- 首先将文件读写偏移重置到文件开头:
call (void)rewind(file) - 逐行读取打印文件内容:
你可以直接执行下面的循环命令,其中$buffer是GDB内置便利变量,无需提前声明:while (call fgets($buffer, 1024, file) != 0) call printf("%s", $buffer) - 如果你已经知道打开的文件路径,也可以直接调用system命令输出内容:
call (int)system("cat /etc/passwd")
方法2:直接使用GDB的shell命令查看
如果你清楚当前打开的文件路径,可以直接在GDB内调用shell命令打印文件:shell cat /etc/passwd
内容的提问来源于stack exchange,提问作者CoopDaddio
相关产品推荐
相关产品推荐

