我想知道是否有可能配置visual studio 2008调试器以在线程以精确错误代码(或至少任何非零值)退出时停止执行。我的应用程序使用了大量的线程,因此无法手动跟踪它们。
当程序中的任何线程命中“exit(X);”时,有没有办法告诉VS2008中断? (X与0不同)和显示源?
答案 0 :(得分:3)
是,在函数_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
映射到的名称。