У меня есть метод с возвратами IEnumerable<T>
и я пытаюсь отладить код в том методе.
Каждый раз, когда я ступаю через код в Visual Studio во время отладки, это переступает через рассматриваемый метод.
Когда я помещаю точку останова в методе, он никогда не поражается. Код определенно работает, поскольку я протестировал yield return
'луг фальсифицирует T из метода.
Разве это не возможно отладить методы IEnumerable этот путь или, я делаю что-то еще неправильно?
Попробуйте найти экземпляры Timercallback
(для Threading.timer):
!dumpheap -type TimerCallback
затем выбросить свойства обратного вызова (где Адрес обратного вызова - «Адрес» из выхода DUAMPHEAP):
!do <callback address>
Затем выбросить значение
Адрес _Target
:
!do <_target address>
, который должен высказывать объект, который содержит Ссылка на TimerCallback, которая должна привести вас к тому, где был создан таймер.
Рекомендую проверить TESS FERRANDEZ's отладки лаборатории , если вы еще этого не сделали.
Мое понимание состоит в том, что мертвая тема относится к потоке C ++, которая больше не имеет активной резьбы ОС, но все же имеет ссылки и, следовательно, не могут быть уничтожены (резьбы C ++ используют Ref подсчет).
Нить C # содержит ссылку на резьбу C ++, и если ваш управляемый код хранит ссылку на резьбу C #, то это может быть ваша проблема.
Этот пост на блоге Юнь Джина может оказаться некоторым интересам для вас.
, который выглядит как нить таймера (System.threading), ожидающий его интервала для пробка.
-121--2708710-public List<File> getFilesInJar(String jarName){
List<File> result = new ArrayList<File>();
File jarFile = new File(jarName);
JarInputStream jarFile = new JarInputStream(new FileInputStream(jarFile));
JarEntry jarEntry;
while ((jarEntry = jarFile.getNextJarEntry()) != null) {
result.add(inputStreamToFile(jarFile.getInputStream(jarEntry)));
}
return result;
}
Для метода ввода ввода, Google «java plactStream к файлу», хотя вы можете быть довольны объектом INPUTSTREAM также, вместо файлового объекта :)
-121--2975530-Этот метод становится только ударом только при использовании элементов в IENumerable. Помните, что IEUmerable Lazy загружает предметы, так что только потому, что вы вызываете метод, который возвращает IEnumerable, не означает, что метод на самом деле вызывается в этой точке. Если вы хотите, чтобы он попал вправо, когда вы это называете, добавьте Tolist () в конце вашего метода Call:
var result = myEnumerableMethod().ToList();
Не должно быть проблемой для отладки реализации Ienumerable ... Может быть, вы просто используете неправильный .dll (если вы перечислитете в внешней библиотеке) ...
Вы можете попробовать простую тестовую консоль, и перейти отсюда
class Program
{
static void Main(string[] args)
{
foreach (String foo in new Foo())
{
Console.WriteLine(foo);
}
}
}
class Foo : IEnumerable<String>
{
#region IEnumerable<string> Members
public IEnumerator<string> GetEnumerator()
{
yield return "fake # 1";
yield return "fake # 2";
}
#endregion
#region IEnumerable Members
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
#endregion
}