【发布时间】:2020-03-04 18:52:15
【问题描述】:
我有以下代码:
write(fd[1], user_id, sizeof(user_id));
是否可以使用 gdb 查看此命令写入的缓冲区的内容? 使用 x 或 print 只是给出内存地址,而不是该地址中缓冲区的内容。
(gdb) x write
0x7ffff7af4140 <__GI___libc_write>: 0xb1058d48
由于fd[1]指的是stdout,所以这个请求应该相当于检查stdout缓冲区的状态。
附加信息: user_id 是一个字符数组。 fd[1] 表示 write 正在写入标准输出(fd[0] 指的是标准输入)。 这是程序的第 44 行,我正在使用断点访问它。
【问题讨论】:
-
你想看
user_id?您使用的是哪个命令?请将此信息和输出添加到问题中 -
添加了一些说明
-
关于最新的编辑,你的意思是什么缓冲区?在
read()和write()函数的术语中,在这种情况下,“缓冲区”是user_id。文件描述符没有关联的数据缓冲区,或者至少没有文档记录。 -
我明白了。我想看看文件描述符的缓冲区,在这种情况下它指向stdout,所以是stdout的缓冲区。 (我正在调试的根本问题是我连续产生 2 个写入调用,并且在一个单独的文件中产生了 2 个读取调用,但由于某种原因,只发生了一个事务,而不是 2 个 - 第一个写入调用由第一次读取。第二次读取不接受任何输入)