我正在开发一个.Net探查器..我使用ILRewriting来实现..
我需要跟踪托管的线程创建并销毁。
需要知道将在线程开头调用的线程相关函数,并且在线程结束期间,我可以将代码注入其中并在事件发生时进行记录。
关于默认函数的任何想法,将在创建线程时调用并结束.. ??
或者有没有其他方法来捕获托管线程创建和销毁事件?
我知道我们可以通过设置线程事件掩码进行跟踪..但我需要捕获特定的托管线程而不是所有线程..
答案 0 :(得分:2)
正如Hans所指出的,CLR使用ThreadCreated和ThreadDestroyed回调通知分析器线程创建/销毁。注意:如果运行时在线程终止之前关闭,那么您将无法获得ThreadDestroyed回调...但我认为您没有获得ThreadDestroyed回调的可能性更大的原因是IIS(我假设是'页面加载'你指的是asp .NET页面)决定保留线程以便将来的请求作为优化,如果它认为它有足够的其他线程,它可能决定稍后终止它。
此外,关于您对该问题的第二条评论,ThreadID与ManagedThreadID之间没有任何关系。我相信ThreadID是对内部数据结构的引用(将其视为不透明值,不要试图解释它),ManagedThreadID似乎是一个简单的数字,顺序分配为线程首先输入托管代码。如果您想要识别哪个ThreadID与哪个托管线程相对应,我可以考虑3个选项: