gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 22:28:10 25 4
gpt4 key购买 nike

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

当调度程序启动我的 exe 时,如何跳入调试 session ?

更新 1。我曾想过执行 Thread.Sleep 然后附加到进程。当我尝试时,它说调试器已经附加到进程...

最佳答案

您可以在程序中调用DebugBreak()

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

Causes a breakpoint exception to occur in the current process. This allows the calling thread to signal the debugger to handle the exception.

To cause a breakpoint exception in another process, use the DebugBreakProcess function.

此时您可以附加调试器,并继续运行程序。

此解决方案的唯一问题是您需要将代码中的 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 才能使用此函数)。

关于debugging - 如何调试通过 Windows Scheduler 运行的 exe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/588946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com