2010-08-30 4 views
0

Я использую windbg с встроенным xp. Попытка получить символы операционной системы завершается с сообщением «Файл Symbol не найден. По умолчанию экспортируются символы для ntdll.dll». (Является ли это типичным для xp embedded ???)Windbg с xp embedded, ntdll.dll символы не работают, другие символы затронуты?

У меня нет проблем с поиском и загрузкой символов и источников для моего собственного кода. Однако, перешагнув код, существует серьезное несоответствие между кодом и символьным файлом, поскольку местоположение переменных в памяти, возвращаемое dv, похоже, не согласуется с фактическим содержимым памяти (например, назначает переменную, а затем адрес что dv утверждает, соответствует ему, не появляется без изменений).

My sympath сначала перечисляет каталог символов, а затем кеш, а затем файлы, хранящиеся в кеш-файле, не должны мешать.

Это скрытый эффект от поиска файлов символов ntdll и использования другого, который не соответствует правильно или есть что-то еще, что может вызвать это?

Пример:
.sympath D:/Symbols
.symfix+
.srcpath D:/Symbols ** Yes, currently the source is in with the symbols
.reload
** (defaults to export symbols for ntdll.dll since symbol file can't be found)
bp 00401000 (break at a constructor)
g
(program runs till it hits constructor)
l+t
dv /i /t /V ** look up this pointer memory location to check constructor
** We bring up a memory window at the location the this pointer refers to and
** step through the code, but no changes appear in that memory window
** moreover a local LARGE_INTEGER whose value is set with QueryPerformanceCounter
** also appears unchanged after the call
** when the constructor returns we assign the memory address returned by
** new to a global pointer, whose memory address we look up with dt, but
** after the call that address still has 0 in it

Может кто-нибудь сказать мне, как на самом деле это исправить?

В качестве примечания мы фактически запускаем cdb в качестве сервера на встроенной машине xp и используем опцию «connect to remote session» для windbg. Вышеупомянутые команды выполняются через windbg.

ответ

1

Выполнение запроса: sym noisy before .reload сообщит вам, что не находит символы для ntdll.dll. Вполне возможно, что они просто не индексируются на сервере символов, что, как правило, означает, что вам не повезло (на самом деле нет никого, с кем можно связаться, чтобы устранить это, к сожалению).

Что касается других ваших вопросов символов:

1) Является ли это релиз сборки кода? Если да, то это полностью ожидалось

2) Если это сборка отладки, вы на 100% уверены, что источник, на который вы указываете, совпадает с целевой машиной? Перед ответом убедитесь, что вы на 100%.

-scott

+0

Yup,! Sym noisy был очень полезен. Такой файл не найден на сервере символов Microsoft. Whoa! Не понял, что режим релиза будет делать это (все еще очень новичок windbg и предыдущее использование было на Win7). Выключена оптимизация в режиме выпуска, и теперь она работает намного лучше. Благодаря! –

Смежные вопросы