是否有可能在具有特定错误代码的线程退出时中断?

GaT*_*aCa 9 multithreading exit-code visual-studio-2008 visual-studio-debugging

我想知道是否可以配置visual studio 2008调试器以在线程以精确错误代码(或至少任何非零值)退出时停止执行.我的应用程序使用了大量的线程,因此无法手动跟踪它们.

当程序中的任何线程命中"exit(X);"时,有没有办法告诉VS2008中断?(X与0不同)和显示源?

Ada*_*eld 5

是的,在函数中设置一个断点_RtlExitUserThread@4,并添加条件*(int*)(ESP+4) == 42以测试退出状态是否为特定值(在此示例中为42);对于64位程序,请使用ESP+8代替ESP+4

但是,如果线程是通过返回其主线程过程(通常的情况)而不是直接调用ExitThread其包装器之一退出的,则除了该线程是什么线程或导致它退出的原因之外,您将没有任何信息。退出状态和线程ID。

注意:函数名称_RtlExitUserThread@4是实现的详细信息,在将来的Windows版本中可能会更改;_RtlExitUserThread@4是Windows 7上的名称。要查明系统上的实际dumpbin /exports C:\Windows\system32\kernel32.dll名称,请运行并查找ExitThread映射到的名称。