2010-08-17 5 views
1

Предположим, у меня есть пользовательская служба, написанная на VC++ 6.0, и я отправил ее как часть определенной версии. К сожалению, я не принимал pdb при создании двоичного файла.Символы файлов и отладки

На более поздний момент мой клиент сообщил об аварии, и мне пришлось получить pdb, чтобы определить причину сбоя. Будет ли pdb, который я возьму, теперь будет достаточно, чтобы определить момент сбоя.

Другими словами, я взял двоичный и pdb отдельно, однако я не внес никаких изменений в исходный код после принятия двоичного кода.

Мое понимание состоит в том, что даже мысли, что символы не совпадают с точки зрения даты и времени, когда они были построены, но с точки зрения содержания, которое оно будет соответствовать.

Правильно ли я понимаю?

ответ

1

Вам необходимо убедиться, что вы скомпилированы с точно такой же версией компилятора (исправления могут изменять генерации и адреса кода), набор параметров компилятора/компоновщика, те же версии библиотек, что и тот же источник, чтобы убедиться, что адресов. Если вы в состоянии это сделать, тогда вы сможете взять pdb, сгенерированный позже.

Однако, даже если это не соответствует точно, возможно, что он приближает вас, чтобы увидеть ошибку при осмотре.

+0

Хм Хорошо, я понимаю, что вы пытаетесь сказать. Благодарю. – ckv

+0

И это все равно не будет работать, если код использует макрос '__DATE__' интересными способами. – MSalters

1

Да, это должно работать без проблем (хотя, если память обслуживается, вы можете ожидать предупреждения о несоответствующих отметках времени).

+0

Да, я видел предупреждение в windbg. Но суть в том, что это сработает. – ckv

+0

@ckv: Я предполагаю, что там может быть какой-то темный угол, где все не сработает, но, похоже, оно все время обрабатывало все, что мне нужно. –

+0

Вот почему я подумал о поиске экспертного мнения от пользователей SO здесь. – ckv

0

.pdb и двоичные файлы должны быть в состоянии отлично работать, если они были построены из одного и того же исходного кода, даже если они не были в то же время. Однако вы не сможете загрузить это в любом отладчике. Например, отладчик Visual Studio откажется загружать его, потому что он скажет, что они несовместимы.

Вам нужен отладчик, который может принимать несогласованные символы, такие как WinDbg. Для загрузки с несогласованными символами введите волшебную команду symopt + 0x40.

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