如何使用字符串值作为日志文件名

问题描述 投票:1回答:2

我正在使用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字符串的值作为日志文件名?

c gdb c-strings
2个回答
0
投票

但是gdb在我的工作目录中创建了文件$ _file,而不是读取变量的值。

似乎GDB set logging file缺少其参数的eval。您应该为此提交bugzilla功能请求问题。

如果您的GDB是使用嵌入式Python构建的,则可以通过将Python命令附加到断点来轻松完成所需的操作。


0
投票
eval "dump value %s fileName", fileName
© www.soinside.com 2019 - 2024. All rights reserved.