117

调试时输出窗口中的线程退出代码到底是什么?它给了我什么信息?它是有用的还是只是一个不应该打扰我的内部东西?

The thread 0x552c has exited with code 259 (0x103).
The thread 0x4440 has exited with code 0 (0x0).

是否可能存在某种可能的退出代码列表及其重要性?

4

3 回答 3

101

实际上似乎没有很多关于这个主题的解释,但是退出代码应该用于指示线程如何退出,0往往意味着它安全退出,而其他任何东西往往意味着它没有'没有按预期退出。但是这个退出代码可以自己在代码中设置以完全忽略这一点。

我能找到对更多信息有用的最接近的链接是这个

从上面的链接引用:

无论退出的方法是什么,从进程或线程返回的整数必须是 0-255(8 位)之间的值。零值表示成功,而非零值表示失败。尽管您可以尝试返回任何整数值作为退出代码,但只有整数的最低字节作为退出代码的一部分从您的进程或线程返回。操作系统使用高阶字节来传达有关进程的特殊信息。退出代码在批处理/shell 程序中非常有用,这些程序根据一个程序的成功或失败有条件地执行其他程序。


来自GetEXitCodeThread的文档

重要 GetExitCodeThread 函数仅在线程终止后返回由应用程序定义的有效错误代码。因此,应用程序不应使用 STILL_ACTIVE (259) 作为错误代码。如果线程返回 STILL_ACTIVE (259)作为错误代码,测试此值的应用程序可以将其解释为表示线程仍在运行,并在线程终止后继续测试线程是否完成,这可能会使应用程序进入无限循环。


我对这一切的理解是,如果您在自己的应用程序中为自己的应用程序使用线程,退出代码并不重要。如果您同时运行几个相互依赖的线程,则可能是一个例外。如果需要外部源读取此错误代码,则可以将其设置为让其他应用程序知道您的线程的状态。

于 2013-09-19T06:52:00.347 回答
55

正如 Sayse 所说,退出代码259 (0x103)具有特殊含义,在这种情况下,被调试的进程仍在运行。

我在调试 Web 服务时经常看到这一点,因为线程在执行每个 Web 服务调用后会继续运行(因为它仍在侦听进一步的调用)。

于 2013-12-30T10:44:02.260 回答
0

发生在我身上的是我的解决方案中有多个项目。我的意思是调试项目 1,但是,项目 2 被设置为默认启动项目。我解决了这个问题,右键单击项目并选择“设置为启动项目”,然后运行调试就可以了。

于 2015-06-22T14:46:49.917 回答