Как я могу включить номера строк в трассировку стека без pdb? - PullRequest
30 голосов
/ 25 августа 2009

В настоящее время мы распространяем приложение WinForms без файлов .pdb для экономии места на клиентских компьютерах и загрузки полосы пропускания. Когда мы получаем трассировки стека, мы получаем имена методов, но не номера строк. Есть ли способ получить номера строк, не прибегая к распространению файлов .pdb?

Ответы [ 4 ]

34 голосов
/ 25 августа 2009

Вы не можете получить трассировку стека с номерами строк непосредственно из вашего приложения, если не объедините PDB. Однако , если у вас есть файлы PDB для той же версии приложения, которую вы отправляете своим клиентам, и вы не возражаете против некоторого легкого написания сценариев, тогда вы можете включить. Трассировка стека NET и смещения IL обратно в номера строк.

Во время процесса сборки используйте конвертер Майка Сталла pdb2xml , распространяемый как часть его превосходного отладчика управляемого кода MDbg , и храните их в надежном месте (например, контроль исходного кода). Получив трассировку стека от клиента, вы можете запросить смещение IL из данных XML, чтобы определить соответствующий номер строки. Если ваши следы стека отправляются на веб-сайт, вы даже можете автоматизировать преобразование, чтобы разработчики уже получали полностью подробные следы стека к тому времени, когда дела попадают в папку «Входящие».

8 голосов
/ 25 августа 2009

Нет. Номера строк являются частью отладочной информации, которая хранится только в файле PDB. Именно поэтому файлы PDB существуют в первую очередь.

1 голос
/ 25 августа 2009

Не подходящий ответ на ваш вопрос, но у меня есть предложение. Вы можете включить механизм регистрации и получить эти файлы журнала вместе со следами стека. Если вы включите номера строк в свои сообщения журнала, вы можете вручную объединить информацию регистрации с вашей трассировкой стека.

Если вы не хотите занимать много места, вы можете использовать файлы журнала ограниченного размера, таким образом будут сохраняться только самые последние сообщения журнала.

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

0 голосов
/ 25 августа 2009

нет там нет. Вся информация, необходимая для сопоставления строк IL с исходным исходным файлом и номером строки, хранится в PDB. Невозможно получить эту информацию в трассировке стека без PDB.

...