在Visual Studio中按下"停止调试"按钮时拦截信号/事件

Intercept signal / event when 'Stop Debugging' button is pressed in Visual Studio

本文关键字:按钮 事件 信号 调试 Studio Visual      更新时间:2023-10-16

背景:我正在为API编写一个QA自动化平台,该平台将格式化的结果输出到指定的目录。此外,我还开发了一个GUI应用程序来分析这些结果。当我们的自动构建系统正在运行修改/生成新的测试数据的第一应用程序时,用户可以运行第二应用程序来尝试分析测试结果。为了避免混乱,我让每个应用程序在进行修改时获取文件锁,并在修改完成后释放它们。在正常程序终止时,如果正在运行的应用程序获取了数据目录上的锁定,则释放该锁定。

问题:当任何一个工具过早存在时(用户按下CTRL-C,用户在调试器中停止应用程序,或由于测试API/应用程序逻辑有缺陷),我需要能够释放上述文件锁。为了处理这个问题,我使用sigaction实现了一个信号处理程序,它处理拦截致命信号(经过测试和工作),并通过Win32函数SetConsoleCtrlHandler实现了ctrl-c处理程序。但是,我似乎找不到一种方法来拦截用户在Visual Studio中按下停止调试按钮的事件。我认为这个事件会生成类似SIGKILL/SIGSTOP的东西(不能通过sigaction处理),但我也希望有一些std库或Win32功能来拦截这个事件并执行一些清理。你们知道处理这个事件的方法吗?甚至知道这个按钮到底是用来杀死正在运行的应用程序的吗?

如果使用boost,则可以使用boost::interprocess::windows_shared_memory

它保证在流程结束时发布。

在这种情况下,Boost只是windows API的一个巧妙包装。它包装Windows命名共享内存API。