当前位置:  开发笔记 > 开发工具 > 正文

如何调试通过Windows Scheduler运行的exe?

如何解决《如何调试通过WindowsScheduler运行的exe?》经验,为你挑选了1个好方法。

我正在使用Windows Scheduler来运行我编写的exe.

当调度程序启动我的exe时,如何跳转到调试会话?

更新1. 我曾想过做一个Thread.Sleep,然后选择Attach to Process.当我尝试它时,它说调试器已经附加到进程...



1> LeopardSkinP..:

你可以从你的程序中调用DebugBreak().

根据MSDN页面,DebugBreak执行以下操作:

导致在当前进程中发生断点异常.这允许调用线程通知调试器处理异常.

要在另一个进程中导致断点异常,请使用DebugBreakProcess函数.

然后,您可以在此时附加调试器,并继续运行该程序.

此解决方案的唯一问题是您需要使代码中的DebugBreak()成为条件,以便每次运行程序时都不会中断.也许您通过环境变量,注册表设置或调度程序传入程序的参数来实现此目的,以确保它在启动时中断.

示例代码

这是一些未经测试的示例代码读取环境变量:

int main()
{
    char *debugBreakChar = getenv("DEBUG_BREAK");
    int debugBreak = atoi(debugBreakChar);
    if (debugBreak)
    {
        DebugBreak();
    }

    // Rest of the program follows here
}

现在您需要做的就是将环境变量设置为系统变量,并确保它可以从与调度程序相同的shell上下文访问(重新启动将实现此目的):

set DEBUG_BREAK=1

现在程序将在启动时中断,允许您附加调试器.将环境变量更改为0或取消设置它将允许程序正常运行.

在这方面,环境变量有点繁琐,因为它们是基于上下文的,您需要知道调度程序从相同的环境上下文运行.注册表值优于此,您可以在代码中使用RegQueryValueEx读取注册表值(您需要包含windows.h才能使用此函数).

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有