Как получить дотнетные колстеки всех потоков процесса?
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.02.18 15:47
Оценка:
Всем привет.

Что-то, казалось бы, задача совсем простая. Но я так и не нашел как ее решить. Точнее как получить колстек имея объект типа Thread (System.Threading.Thread) я сно. Но не ясно, как найти все Thread в процессе?

Есть:
Process.GetCurrentProcess().Threads

но он возвращает коллекцию загадочноых объектов ProcessThread, а мне нужны именно Thread, так как я хочу получить по ним колстеки каждого потокаЮ, а как получить списко Thread.

В общем, есть ли способ получить дотнетные колстеки всех потоков?

Причем все это еще нажуно на Xamarin. Так что вынь-апишные финты не канают.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Как получить дотнетные колстеки всех потоков процесса?
От: takTak  
Дата: 08.02.18 16:03
Оценка:
https://stackoverflow.com/questions/8386592/difference-between-thread-class-and-processthread-class-in-net :
ProcessThread is rather a Thread Info class on threads of a process. You cannot start, stop or abort it, it just some information on the thread.

тут https://stackoverflow.com/questions/10315862/get-list-of-threads ещё пишут про ClrThread, у него наверное, CallStack имеется
Re: Как получить дотнетные колстеки всех потоков процесса?
От: takTak  
Дата: 08.02.18 16:16
Оценка:
чувак один 5 лет назад штуковину написал:

https://blogs.msdn.microsoft.com/dotnet/2013/05/01/net-crash-dump-and-live-process-inspection/

https://blogs.msdn.microsoft.com/dougste/2013/05/04/clrmd-net-crash-dump-and-live-process-inspection/

https://stackoverflow.com/questions/2057781/is-there-a-way-to-get-the-stacktraces-for-all-threads-in-c-like-java-lang-thre
Re[2]: Как получить дотнетные колстеки всех потоков процесса?
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.02.18 16:18
Оценка:
Здравствуйте, takTak, Вы писали:

T>https://stackoverflow.com/questions/8386592/difference-between-thread-class-and-processthread-class-in-net :

T>ProcessThread is rather a Thread Info class on threads of a process. You cannot start, stop or abort it, it just some information on the thread.

Ну, вот и получается, что получить потоки нельзя.

Но все еще печальнее:
https://github.com/mono/mono/blob/master/mcs/class/corlib/System.Diagnostics/StackTrace.cs#L153

StackTrace умеет работать только с текущим потоком. Они этот конструктор для галочки сдеалали.

T>тут https://stackoverflow.com/questions/10315862/get-list-of-threads ещё пишут про ClrThread, у него наверное, CallStack имеется


Это майкросовстовская байда. Она под Моно не работает.

Нужен аналог под Моно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Как получить дотнетные колстеки всех потоков процесса?
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.02.18 16:33
Оценка:
Здравствуйте, takTak, Вы писали:

T>чувак один 5 лет назад штуковину написал:

T>https://blogs.msdn.microsoft.com/dotnet/2013/05/01/net-crash-dump-and-live-process-inspection/
T>https://blogs.msdn.microsoft.com/dougste/2013/05/04/clrmd-net-crash-dump-and-live-process-inspection/
T>https://stackoverflow.com/questions/2057781/is-there-a-way-to-get-the-stacktraces-for-all-threads-in-c-like-java-lang-thre

Это я все видел. Но у меня Mono и Xamarin, а эта байда чисто майкросовтовская.

В исходниках Моно нашело почти то что нужно:
https://github.com/mono/mono/blob/master/mcs/class/corlib/System.Threading/Thread.cs#L682

Но эта хрень internal. Вот найти бы публичную обертку над ней!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Как получить дотнетные колстеки всех потоков процесса?
От: takTak  
Дата: 08.02.18 16:39
Оценка:
а что, под моно дебаггера нет? там же вся эта информация и требуется...

так а чего ты паришься, если нашёл? вызвать метод ты можешь через Reflection:
https://stackoverflow.com/questions/11908156/call-static-method-with-reflection
Re[4]: Как получить дотнетные колстеки всех потоков процесса?
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.02.18 17:23
Оценка:
Здравствуйте, takTak, Вы писали:

T>а что, под моно дебаггера нет? там же вся эта информация и требуется...


Есть. Но вряд ли кто-то из пользователей, при проблемах с софтиной из маркета, будет им пользоваться .

T>так а чего ты паришься, если нашёл? вызвать метод ты можешь через Reflection:

T>https://stackoverflow.com/questions/11908156/call-static-method-with-reflection

Собственно уже вызываю. Я это дело нашел в процессе чтения исходников Моно (уже после того как тут вопрос задал).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Как получить дотнетные колстеки всех потоков процесса?
От: takTak  
Дата: 08.02.18 17:51
Оценка:
T>>а что, под моно дебаггера нет? там же вся эта информация и требуется...

VD>Есть. Но вряд ли кто-то из пользователей, при проблемах с софтиной из маркета, будет им пользоваться .



а что, моновский дебаггер прямо из си метаинформацию считывает? странно, что они обертку не сделали
Re[5]: Как получить дотнетные колстеки всех потоков процесса?
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.02.18 23:49
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Собственно уже вызываю. Я это дело нашел в процессе чтения исходников Моно (уже после того как тут вопрос задал).


Уже не вызываю. Глюкодром страшний. Один телефон грохнулся при чтении результата, другой при попытке получить через рефлексию ссылку на этот метод. В общем, на сегодня решение не рабочее. Разве что более новых версиях Моно подправят это дело. Тесты вроде бы есть.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.