在c# / Visual Studio中,任何方法都可以在断点上休眠

本文关键字:方法 都可以 断点 休眠 任何 Visual Studio | 更新日期: 2023-09-27 18:09:48

在c#/Visual Studio中遇到断点时,是否有任何方法可以延迟当前线程的执行一段指定时间?休眠后,执行应继续。

我知道VS中有一个"When hit"功能,允许在遇到断点时执行任意代码(主要是将信息打印到控制台),但它非常有限;它不允许把Thread.Sleep或者任何耗时的操作(比如for循环)放在那里。也不允许使用委托/lambda函数。

我正在使用Visual Studio 2012。

在c# / Visual Studio中,任何方法都可以在断点上休眠

我有一个需要一次性重新编译的本地解决方案。如果需要的话,我相信它可以被翻译成c#。

定义这个结构:

struct THREAD_DATA
{
    int ms;
    DWORD id;
    THREAD_DATA(DWORD _id, int _ms) : id(_id), ms(_ms) {};
};

和这两个函数:

DWORD WINAPI PauseThread(LPVOID p)
{
    THREAD_DATA* ptd = (THREAD_DATA*)p;
    HANDLE target = OpenThread(THREAD_SUSPEND_RESUME, FALSE, ptd->id);
    SuspendThread(target);
    Sleep(ptd->ms);
    ResumeThread(target);
    delete p;
    return 0;
}
void PauseCurrentThread(int ms)
{
    THREAD_DATA* ptd = new THREAD_DATA(GetCurrentThreadId(), ms);
    HANDLE h = CreateThread(NULL, 0, &PauseThread, (LPVOID)ptd, 0, 0);
}

当你在断点上时,使用即时窗口运行:PauseCurrentThread(5000)或任何你的延迟毫秒应该

如果你想在没有仪器的情况下在多个项目中做到这一点-我可能会开发一个Visual Studio扩展来自动做到这一点。