WinDbg 时间旅行调试器是惊人的魔法

主要观点:本周了解到 WinDbg 有时间旅行调试器(TTD),此工具可向前向后自由移动,能帮助找出程序进入坏状态的原因,如在多线程程序中找出内存被篡改或调用栈被破坏的原因。
关键信息

  • 可通过安装 WinDbg时间旅行调试器文档CppCon 2017 演示了解相关内容。
  • TTD 可在指令级别工作,无需插装且在多线程时也具有确定性。
  • 举例说明在两个线程程序中,通过设置内存事件和“旅行到位置”等操作可找到导致问题的代码行和调用栈。
    重要细节
  • 如在两个线程函数reader_threadstomper_thread中,stomper_thread可能会将随机指针改为0xbadf00d导致reader_thread出错,通过 WinDbg TTD 可找到具体修改该内存地址的代码行。
  • 另一个例子中故意破坏调用栈,通过向后步进可找到正确的调用栈。
  • 但使用 WinDbg TTD 有性能损失(5 到 20 倍)和生成大的跟踪文件(每秒约千兆字节)的缺点,可附加到运行中的进程。目前仅用于调试简单示例,不确定在“真实程序”中生成的数据量是否有用,Valgrind 等类似工具可能也能发现这些问题,但 TTD 能找出复杂状态问题的根源。
阅读 12
0 条评论