You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用GDB正确打印内置类型time_t的变量值

GDB打印time_t类型变量异常解决方法

你打印结果不符合预期的核心原因是变量还未完成初始化:
你执行n指令后跳转到了time_t dataFrom = 1234560;这一行,此时该行代码尚未执行,dataFrom存储的是栈内存的随机垃圾值,所以输出结果和你设置的初始值完全不符。


正确操作步骤

  • 完成变量初始化:在跳转到赋值行后,再执行一次n指令,等赋值语句执行完成后再打印变量
  • 打印time_t原始数值:time_t是标准库定义的算术类型,在绝大多数64位系统上是long int的别名,不需要额外给GDB提供结构定义,直接执行p dataFrom或者p (long)dataFrom即可输出正确的数值
  • 打印人类可读的时间格式:可以直接调用C标准库函数输出格式化时间,执行call ctime(&dataFrom)即可得到和代码中asctime(gmtime(&dataFrom))类似的可读时间结果

操作示例

(gdb) n
10      time_t dataFrom = 1234560;
(gdb) n  # 执行赋值语句完成初始化
11      cout << "dataFrom = " << asctime(gmtime(&dataFrom)) << "\n";
(gdb) p dataFrom
$1 = 1234560
(gdb) call ctime(&dataFrom)
$2 = 0x5555557562a0 "Thu Jan 15 14:56:00 1970\n"

注意事项

time_t本身不是指针类型,你之前执行p *dataFrom能得到结果是因为未初始化的垃圾值刚好被识别为内存地址,属于未定义行为,变量初始化完成后执行该指令会触发GDB报错。

内容的提问来源于stack exchange,提问作者badri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:54:04