我正在使用GDB调试C程序。我有一个数组,其值被更新了很多次(小于4.000)。我想将这些值写入每次迭代的不同文件中。
我试图直接在GDB文件中设置日志文件名:
break test.c:95
commands
silent
# Set the logging file
set $_file=(char*)malloc(64)
call snprintf($_file, 64, "~/path/to/logging/file_%04d.txt", i) # i is the for variable
set logging file $_file
call free($_file)
set logging redirect on
set pagination off
set logging overwrite on
set logging on
set $_data=array
set $_x=0
while ($_x<2000)
set $_y=0
while ($_y<2000)
printf "%f ", $_data[$_x][$_y]
set $_y++
end
printf "\n"
set $_x++
end
# Log default setup
set logging off
set logging redirect off
set logging overwrite off
set pagination on
continue
end
但是gdb在我的工作目录中创建了文件$_file
,而不是读取变量的值。
然后,我尝试将要在其中记录输出的文件名放在代码中的变量fileName
中(也使用snprintf
)。结果是一样的,在我的工作目录中创建了一个fileName
文件。
最后,我尝试将调试代码放入gdb函数中,并将fileName
用作该函数的参数,但像以前一样,它不解释字符串。
我的问题使用GDB,如何使用C字符串的值作为日志文件名?
但是gdb在我的工作目录中创建了文件$ _file,而不是读取变量的值。
似乎GDB set logging file
缺少其参数的eval
。您应该为此提交bugzilla功能请求问题。
如果您的GDB是使用嵌入式Python构建的,则可以通过将Python命令附加到断点来轻松完成所需的操作。
eval "dump value %s fileName", fileName