我想知道如果它是可以配置的Visual Studio 2008调试器停止执行当一个线程具有精确的错误代码(或至少任何非零值)离开。 我的应用程序中使用线程的数量巨大,因此不可能手动跟踪他们。
有没有办法告诉VS2008打破时,程序中的任何线程遇到“退出(X);” (X是从0不同)和显示资源?
我想知道如果它是可以配置的Visual Studio 2008调试器停止执行当一个线程具有精确的错误代码(或至少任何非零值)离开。 我的应用程序中使用线程的数量巨大,因此不可能手动跟踪他们。
有没有办法告诉VS2008打破时,程序中的任何线程遇到“退出(X);” (X是从0不同)和显示资源?
是的,在函数中设置断点_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
映射到。