Создать PDB из файла .NET DLL?

Мне нужно что-то, что может генерировать PDB из файла DLL (код C# .NET), есть ли какая-нибудь бесплатная программа для этого?


person BrunoLM    schedule 18.05.2010    source источник
comment
Теоретически это можно сделать, так как с .net dll вы можете получить исходный код (с точностью до погрешности эксперимента). Единственная недостающая часть — это формат файла PDB, который является строго охраняемым секретом. Reflector может взять dll и превратить ее в решение, где вы можете использовать Visual Studio для его компиляции и одновременного создания PDB. Вы используете Visual Studio для создания PDB для вас, поскольку он знает секретный формат.   -  person Ian Boyd    schedule 12.02.2012


Ответы (5)


Вам нужен исходный код для создания PDB.

person Darin Dimitrov    schedule 18.05.2010
comment
Другими словами: невозможно создать PDB, когда у вас есть только DLL. - person Stephen Cleary; 18.05.2010
comment
Ну, я могу использовать Reflector, чтобы получить исходный код, так что мне нужно, чтобы получить PDB? - person BrunoLM; 18.05.2010
comment
Помните, что вы не получаете тот же исходный код, который использовался для компиляции DLL. Это кошмар, если есть лямбда-выражения, итераторы, ... не говоря уже об обфускации. Но предположим, что у вас есть исходный код, вы указываете параметр /pdb для компилятора (msdn.microsoft.com/en-US/library/ms228625(v=VS.80).aspx). - person Darin Dimitrov; 18.05.2010
comment
@BrunoLM Reflector Pro (15-дневная пробная версия, которую они вам дают) сделает именно это - он декомпилирует всю сборку и создаст PDB, чтобы вы могли отлаживать ее. - person Rup; 06.01.2011
comment
Немного вводящий в заблуждение ответ. @Rup прав, я использовал эту опцию в прошлом, и она работает очень хорошо! - person Erti-Chris Eelmaa; 28.04.2014

На самом деле вы можете сделать это и с dotPeek, начиная с версии 1.2.

Щелкните правой кнопкой мыши сборку в Проводнике сборок и выберите «Создать Pdb». Он также имеет возможность генерировать файлы для сборок, на которые ссылаются, сразу.

введите описание изображения здесь

person Stelio    schedule 01.07.2014
comment
если сборка не содержит каталог отладки, она все равно будет работать, если вы объедините это решение с предыдущим ответом (и удалите файл .il перед воссозданием dll/exe) - person sebbu; 13.03.2018
comment
Есть ли способ предотвратить создание такого количества подпапок? - person Hoppe; 29.12.2020

Даже если у вас нет исходников и запутанного кода, вы можете создать pdb путем перекомпиляции с помощью ildasm и ilasm:

  • декомпилировать сборку с помощью ildasm: ildasm /out=имя_сборки.il имя_сборки.dll
  • скомпилировать с помощью ilasm: ilasm имя_сборки.il /dll /pdb
person gdbdable    schedule 10.10.2013
comment
Это достойный вариант в сочетании с debuginfo.com/tools/chkmatch.html - Однако исходный степпинг будет строками IL, а не c# или vb.net. - person JJS; 16.06.2014

PDB содержит символы отладки, связанные с DLL, и обычно создается вместе с DLL. Чтобы включить создание файлов pdb, перейдите в проект Свойства, вкладка Сборка, кнопка Дополнительно... и выберите в Информация об отладке поле "только pdb" или "полное":

Visual Studio генерирует PDB

Если вам нужно отладить стороннюю сборку без исходников, то dotPeek и ReSharper будут чрезвычайно полезны, имея возможность генерировать PDB из DLL. В ReSharper это можно сделать через ReSharper > Windows > Проводник сборок, открыв нужную сборку и нажав "Создать Pdb... ":

Resharper Создать PDB

person Vitaliy Ulantikov    schedule 06.01.2011

Вы можете использовать ILSpy. Это удобное бесплатное приложение для дизассемблирования и создания pdb для управляемых dll.

person YVEF    schedule 04.12.2019