есть что-то подобное в c# ? чтоб информацию о всех threads получить
в программке многопоточной как-то непонятно threads то ли засыпают, то ли умирают, то ли блокируются, и непонятные NullReferenceException вылетают в коде типа
void Method() {
MyClass a = GetA();
if (a != null)
{
a.field1 = 1; // NullReferenceException здесь
}
}
не могу понять
Re: Print all of the thread's information and stack traces
Здравствуйте, mihhon, Вы писали:
M>в программке многопоточной как-то непонятно threads то ли засыпают, то ли умирают, то ли блокируются, и непонятные NullReferenceException вылетают в коде типа
Если код _точно_ такой, то NullReferenceException взяться неоткуда.
Здравствуйте, mihhon, Вы писали:
M>он даже ещё более "неоткуда": а используется как ключ в Dictionary и Exception соответствует null ключу при добавлении в Dictionary
Скорее всего проблема не в самом a, а в словарике, что дёргается из нескольких потоков.
M>я почитал про dump, crash нет, но записать dump можно, наверно надо будет dump смотреть, так как это особо много инфо не даёт:
Если вам нужен стэк вызовов для потока — см System.Diagnostics.StackTrace, один из конструкторов принимает thread в качестве параметра. Только чем вам это поможет — , код уже нагадил в тапки и сбежал.
Re: Print all of the thread's information and stack traces
Здравствуйте, cvetkov, Вы писали:
C>этот код упасть не может, показывайте настоящий.
private UCache GetUnderlyingCache()
{
if (underlyingCache == null)
{
T2 bCache = GetCache();
if (bCache == null)
{
throw new ApplicationException("Unable to resolve the bCache");
}
UCache c;
if (!underlyingCaches.TryGetValue(bCache, out c))
{
c = new UCache(bCache);
underlyingCaches[bCache] = c; // exception here
}
underlyingCache = c;
}
return underlyingCache;
}
System.NullReferenceException: Object reference not set to an instance of an object.
at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
at System.Collections.Generic.Dictionary`2.set_Item(TKey key, TValue value)
at Xxx.GetUnderlyingCache()...
...
может ли такой staktrace означать concurrent access problem в Dictionary ?
хотя вроде этот метод вызывается из threadsafe места ...
Re[3]: Print all of the thread's information and stack trace
C>underlyingCaches не может менятся на null из другого потока?
на null нет, меняться может — это бага, я поставил lock
и поэтому спросил ранее про stacktrace, не может ли это быть из-за concurrent access
Re[7]: Print all of the thread's information and stack trace
Здравствуйте, mihhon, Вы писали:
C>>underlyingCaches не может менятся на null из другого потока? M>на null нет, меняться может — это бага, я поставил lock M>и поэтому спросил ранее про stacktrace, не может ли это быть из-за concurrent access
а в стектрейсе что написано? GetUnderlyingCache первая строчка?
Re[8]: Print all of the thread's information and stack trace
C>>>underlyingCaches не может менятся на null из другого потока? M>>на null нет, меняться может — это бага, я поставил lock M>>и поэтому спросил ранее про stacktrace, не может ли это быть из-за concurrent access C>а в стектрейсе что написано? GetUnderlyingCache первая строчка?
Здравствуйте, mihhon, Вы писали:
C>>>>underlyingCaches не может менятся на null из другого потока? M>>>на null нет, меняться может — это бага, я поставил lock M>>>и поэтому спросил ранее про stacktrace, не может ли это быть из-за concurrent access C>>а в стектрейсе что написано? GetUnderlyingCache первая строчка?
M>http://rsdn.ru/forum/dotnet/4304096.1.aspx