Как проще всего записать pdb-файл Visual Studio из содержимого файла карты? - PullRequest
1 голос
/ 26 марта 2020

Мы часто находимся в ситуации отладки в Visual Studio, когда нам нужно проанализировать стек вызовов, который может содержать много разных слоев C#, python (например, python27.dll, поэтому на самом деле C) и другой нативный код (Delphi). Может быть несколько слоев каждой технологии, вызывающей друг друга. Если мы посмотрим на стек вызовов в отладчике Visual Studio, то не увидим имен методов Delphi. Если мы посмотрим на стек вызовов в отладчике Borland, то не увидим фреймы стека. net.

Поэтому мы решили, что можно создать минимальный файл PDB или DBG из файла .map. что производит Delphi цепочка сборки. Мы готовы написать инструмент, который построчно читает файл карты и записывает содержимое через API в файл PDB или DBG. Однако мы не хотели бы писать код, который записывает точный формат файла «побайтово», а скорее имеет API высокого уровня, предпочтительно путем написания кода C#. Если есть еще более простой способ - даже лучше.

Имея этот файл PDB или DBG, мы бы увидели имена методов всех слоев (C#, Python и Delphi), и это сделало бы мы счастливы. Для Python мы, конечно, увидели бы только «собственный» стек внутри python .dll - это именно то, что нам нужно.

Можно ли записать файл dbg из файла карты? (Файл карты, кажется, содержит по крайней мере сегменты и адреса всех методов).

То, что мы уже попробовали:

  • много разных открытых репозиториев Github (map2dbg, tds2pdb и т. Д. c): все они выдали вывод, который Visual Studio не будет читать, и он не делает этого. не похоже, что стоит потратить время (IMHO)
  • , глядя на microsoft.diasymreader: выглядит точно так же, как API, который мы ищем. Пока что нам нужно проанализировать код Roslyn, чтобы узнать, как использовать программу записи DiaSym

Какой самый простой способ сделать это? Есть ли хороший пример, на который мы могли бы взглянуть?

...