Понимание предупреждений UMDH
Я новичок в использовании UMDH, и у меня возникли проблемы с пониманием того, как поступить с некоторыми ошибками, которые он выводит. Я следую типичному использованию (с сайта MS):
gflags -i OCES.exe +ust
В другом окне терминала:
OCES.exe
А затем обратно в исходное окно терминала:
umdh -p:5712 -f:out1.txt
Но я получаю следующие предупреждения от UMDH
Warning:
Warning: UMDH didn't find any allocations that have stacks collected.
Warning: Use gflags to enable allocation stack collection.
Warning: Restart the application for the setting to be in effect.
Warning: A 32bit GFLAGS must be used. The command is:
Warning: gflags -i OCES.exe +ust
Warning:
Когда я делаю второй вызов UMDH, я получаю ту же ошибку, и когда я использую UMDH для сравнения двух снимков, я не получаю никакого полезного вывода (без стеков или обратных трасс). Я использовал UMDH на другом компьютере и не испытывал этих проблем (другой компьютер больше не доступен для моего использования).
Установка UMDH происходит из 32-разрядной версии коллекции "Средства отладки для Windows", я использую 32-разрядную версию WinXP Professional, и мое программное обеспечение находится на C++ с использованием Visual Studio 2008.
Я провел поиск по этим предупреждениям и не нашел в них ничего полезного. Любая помощь приветствуется.
3 ответа
@Steve - я немного переместил тему из OCES.exe (нашего сетевого движка) в наше основное приложение, но я получаю те же предупреждения (подробности об основном основном приложении см. В следующем ниже). OCES.exe, он просто добавляет другой код). Есть выход в out1.txt
как следующее:
22 bytes + 1E at 151EA0 by BackTrace0
28 bytes + 18 at 151EE0 by BackTrace0
2D8 bytes + 18 at 151F20 by BackTrace0
314 bytes + 1C at 152210 by BackTrace0
314 bytes + 1C at 152540 by BackTrace0
Это немного отличается от некоторых выводов, которые я получил на моем предыдущем компьютере:
C0 bytes + 18 at 154B88 by BackTraceB
7C96EED2
7C94B394
7C918F21
7C91F661
7C91F225
7C91EF58
7C91ED13
7C915BAA
7C91D129
Итак, я предполагаю, что мне не хватает этой информации трассировки стека из out1.txt
, Интересно, имеет ли gflags некоторую ограниченную область влияния на исполняемые файлы?
Запустите приложение gflags и перейдите на вкладку "Файл изображения". Введите название процесса и нажмите Tab. Теперь увеличьте значение в "Backtrace Stack (Megs)", например, до 64 или даже 128. По умолчанию это значение составляет 32Megs, насколько я знаю, и для многократного выделения стека это может быть легко превышено.
Из описания не ясно, сделали ли вы это, но вы должны перезапустить процесс после установки +ust
флаг для этого.
Сравнение не будет выполнено до тех пор, пока вы не избавитесь от предупреждений о выполнении снимка.
РЕДАКТИРОВАТЬ:
В этой статье указывается, что если символы не настроены правильно для ntdll.dll, инструмент не будет работать. Не могли бы вы проверить это?
Проблемы, с которыми вы можете столкнуться при использовании UMDH
Наиболее распространенные ошибки при использовании UMDH возникают потому, что трассировка стека не включена. Кроме того, неправильные символы для Ntdll.dll препятствуют запуску UMDH. Для других файлов символов выполняется UMDH, но файл журнала содержит трассировки стека, которые не имеют имен функций, но вместо этого имеют относительные адреса внутри модулей. Далекая третья ошибка указывает неправильный PID.