有没有办法从 Windows 性能记录器跟踪 (WPR) 中提取实际的调用堆栈地址?

Is there a way to extract actual call stack addresses from a Windows Performance Recorder trace (WPR)?

根据 https://randomascii.wordpress.com/2013/11/04/exporting-arbitrary-data-from-xperf-etl-files/,wpaexporter.exe 应该是正确的工具。

我设法用正确的数据准备了一个配置文件,但不幸的是,wpaexporter 一直在尝试转换地址,即使没有向命令行提供“-symbols”,也生成了一些无用的

/<ModuleName.dll>!<Symbols disabled> 

警告。

这很烦人,因为我们的部分应用程序使用了一些 Delphi 代码,这些代码无法生成 Microsoft 兼容格式的符号。有了地址,我们就可以使用映射文件在调用堆栈中找到 Delphi 个符号。

有没有办法从 wpr 跟踪中提取调用堆栈地址?

是的。您也可以使用 xperf.exe。您是否尝试过操作选项?

我希望 xperf -a stack 在这里有所帮助。

您可以通过xperf -help 处理命令查看详细信息。

谢谢,我完全错过了 xperf 的处理选项...

同时,我发现 LogParser (https://www.microsoft.com/en-us/download/details.aspx?id=24659) 也可以将 etl 文件导出到 csv(也有实际值):

LogParser.exe" "Select * from file.etl" -i:ETW -o:CSV -oTsFormat "HH:mm:ss.ln" > output_file.csv

据我目前所见,LogParser 输出可能更适合自动解析(文件中每个事件只有一行,没有 header),而 xperf 输出更适合人工处理(表格代表)。