如何查看C/C++编写的Windows应用程序运行时被调用的函数
解决方案汇总
完全可以实现,Windows平台下针对不同使用场景有多种成熟工具可以满足查看运行中C/C++程序当前执行函数的需求,常用方案如下:
1. 系统原生免额外复杂配置方案
- 任务管理器(快速排查)
打开任务管理器找到目标进程,右键选择「创建转储文件」,拿到生成的dmp文件后用Visual Studio打开,加载对应版本的pdb符号文件后即可查看所有线程的调用栈,直接定位到当前正在执行的函数。该方案无需提前准备调试环境,适合临时快速排查问题。 - WinDbg Preview(官方调试工具)
微软官方推出的专业Windows调试工具,可直接从微软商店安装。使用流程:- 启动工具后按
F6选择附加到正在运行的目标进程 - 配置符号路径后执行命令
k即可打印当前线程的调用栈,执行~*k可以打印所有线程的调用栈,直接获取各线程当前执行的函数 - 如果需要实时跟踪函数执行流程,可以执行
wt命令跟踪指令和函数调用过程,也可以手动下断点精准监控目标函数的执行。
- 启动工具后按
2. 开发阶段IDE集成方案
- Visual Studio 调试器
如果你持有程序的源码,直接在VS中打开对应项目,点击调试菜单的「附加到进程」,选择目标进程后点击调试暂停按钮,就能在调用栈面板直接看到当前执行的函数,还可以同步查看变量、寄存器等上下文信息,是开发调试阶段最高效的方案。 - VS Code C/C++ 调试插件
若使用VS Code作为开发工具,安装官方C/C++扩展后同样支持附加到运行中的Windows进程,暂停调试后即可查看调用栈信息,使用逻辑和Visual Studio基本一致。
3. 生产环境非侵入式方案
如果目标程序运行在生产环境,不允许附加调试器中断正常运行,可以使用采样类性能分析工具实现无侵入监控:
- Windows Performance Recorder (WPR) + Windows Performance Analyzer (WPA)
两个工具均属于Windows官方性能工具包组件,你可以用WPR采集指定时间段内的程序运行采样数据,导出etl日志文件后用WPA打开分析,即可查看采样时间段内程序各函数的执行占比,以及任意采样点正在执行的函数,整个过程完全不会影响程序的正常运行。 - xperf 命令行工具
命令行版本的性能采样工具,执行命令xperf -on PROC_THREAD+LOADER+PROFILE -stackwalk Profile启动采集,采集完成后执行xperf -d trace.etl导出日志文件,后续同样可以用WPA分析调用栈信息,适合自动化脚本采集场景。
内容的提问来源于stack exchange,提问作者npc537
相关产品推荐
相关产品推荐

