Как открыть файл dmp в visual studio
In previous Visual Studio versions it was possible to open a .dmp file. See link:
But there's no option for VS 2012 in the version picker combo on that MSDN page. Empirically, I cannot open these files in 2012 Ultimate, the IDE tells me:
The is no editor available for 'C:\Windows\MEMORY.DMP'. Make sure the application for the file type (.DMP) is installed.
Is the fact that I can't open it and that there's no documented support a coincidence?
If you don't see "Dump Files" in the combobox on the File + Open + File dialog above the Open and Cancel buttons then the install didn't go well.
2 Answers 2
You have to install Debugging Tools for Windows, which are part of the Windows SDK. You can install just a standalone Debugging Tools, you don't have to install the whole SDK. See for example these resources:
If you need just to quickly inspect a minidump, you can use the great small utility BlueScreenView from Nirsoft. It's simple, doesn't even require an installation or any dependencies (you don't need Debugging Tools) and can display everything what a minidump contains. It's better for just finding out possible causes of BSOD, for any further debugging use Debugging Tools.
@LukePuplett I'm glad it help you. I was looking for the same thing, so I have found your question. And when I have solved it, I thought it would be good to post an answer to your question. Not for you, because I guess you have solved it already long time ago, but mainly for the others. Because if it would be there before, I could solve it much earlier :)
If you're looking to do this in Visual Studio 2013, and wonder why Dawid's answer doesn't seem to fix your issue, you're probably going to have to open the DMP file from within VS2013 by selecting "File->Open->File. " if you were double-clicking.
I could not open DMP files automatically with VS2013, getting the same error as Puplett.
Wait. Sorry, but how else would you like to open it? What exactly do you mean by automatically? Open it automatically always when application crashes and dump file is created?
You can't double-click a .DMP with VS2013 and load it the same way you would be selecting open->file, your dump. I added clarification to the answer.
Oh, got it, sorry. But that's not much related to the OP's question. You can associate any file extension with any application you like of course (Control Panel > Default Programs > Associate a file type or protocol with a program, associate the .dmp with any version of Visual Studio you want and you will open there any .dmp file by executing it). But even if you associate it, without the Debugging tools installed, Visual Studio will just refuse to open it. File type association and actual application's ability to open the specific file type are completely unrelated things.
You can try to associate let say the .zip file type with the mspaint.exe application (Paint) and try to execute any .zip file. MS Paint will be executed, but it'll refuse to open the .zip file because it doesn't understand such format. But still if for example .jpg is associated with anything else than Paint, you can open it there using the Open dialog.
Even with the debugging tools, Visual Studio will not correctly load it automatically. The only way I've been able to process DMPs has been to manually open the file from within the IDE as a file.
Файл дампа — это моментальный снимок, показывающий выполнявшийся процесс и загруженные для приложения модули в определенный момент времени. Дамп со сведениями о куче также содержит моментальный снимок памяти приложения на этот момент.
Открытие файла дампа с кучей в Visual Studio в чем-то подобно остановке в точке останова во время сеанса отладки. Хотя вы не можете продолжить выполнение, но можете проверить стеки, потоки и значения переменных приложения на момент создания дампа.
В основном дампы используются для отладки проблем на компьютерах, к которым у разработчиков нет доступа. Если вы не можете воспроизвести на своем компьютере аварийное завершение или зависание программы, возникшие на компьютере клиента, вы можете записать файл дампа с его компьютера. Дампы также создаются тест-инженерами, чтобы сохранить данные для дополнительного тестирования.
Отладчик Visual Studio может сохранять файлы дампа для управляемого и машинного кода. Он может отлаживать файлы дампа, созданные Visual Studio или другими приложениями, способными сохранять файлы в формате минидампа.
Требования и ограничения
- Для отладки файлов дампа, полученных с 64-разрядных компьютеров, необходимо запустить Visual Studio на 64-разрядном компьютере.
- Visual Studio поддерживает отладку файлов дампа управляемых приложений в Linux.
Visual Studio поддерживает отладку файлов дампа, создаваемых приложениями в машинных кодах на устройствах ARM. Он также поддерживает отладку дампов управляемых приложений с устройств ARM, но только в отладчике машинного кода.
Для отладки файлов дампа, полученных в режиме ядра, или использования расширения отладки SOS.dll в Visual Studio загрузите средства отладки для Windows из комплекта разработки драйверов для Windows (WDK).
Visual Studio не поддерживает отладку файлов дампа, сохраненных в старом формате полного дампа в режиме пользователя. Полный дамп в режиме пользователя не то же самое, что и дамп с кучей.
Отладка с использованием файлов дампа оптимизированного кода может сопровождаться ложной информацией. К примеру, встраивание компилятором функций может приводить к непредвиденным стекам вызовов, а другие виды оптимизации могут изменять время существования переменных.
Файлы дампа, с кучами или без куч
В файлах дампа могут содержаться сведения о куче, но могут и отсутствовать.
Файл дампа со сведениями о куче содержит снимок памяти приложения, включая значения переменных на момент создания дампа. Visual Studio также сохраняет в файле дампа с кучей двоичные файлы загруженных модулей машинного кода, что может значительно упростить отладку. Visual Studio может загружать символы из файла дампа с кучей, даже если не удается найти двоичный файл приложения.
Файлы дампа без сведений о куче намного меньше, чем дампы с кучами, но отладчику нужно будет загрузить двоичные файлы приложения, чтобы найти сведения о символах. Загруженные двоичные файлы должны точно соответствовать тем, которые выполнялись во время создания дампа. В файлах дампа без сведений о куче хранятся только значения переменных стека.
Создание файла дампа
При отладке процесса в Visual Studio можно сохранить дамп, когда отладчик останавливает выполнение при возникновении исключения или в точке останова.
Если включена JIT-отладка, можно подключить отладчик Visual Studio к аварийному процессу, который выполняется вне Visual Studio, а затем сохранить файл дампа из отладчика. См. раздел Подключение к выполняющимся процессам.
Сохранение файла дампа
Когда во время отладки происходит остановка (при возникновении ошибки или в точке останова), выберите Отладка > Сохранить дамп как.
В диалоговом окне Сохранить дамп как в разделе Тип файла можно выбрать Минидамп или Минидамп с кучей (значение по умолчанию).
Укажите путь сохранения и выберите имя файла дампа, а затем нажмите Сохранить.
Вы можете создавать файлы дампа с помощью любой программы, которая поддерживает формат минидампов Windows. Такой программой, например, может быть программа командной строки Procdump из Windows Sysinternals, которая может создавать файлы аварийного дампа процесса на основе триггеров или по требованию. Дополнительные сведения об использовании других средств для создания файлов дампа см. в разделе Требования и ограничения.
Открытие файла дампа
В Visual Studio последовательно выберите Файл > Открыть > Файл.
В окне Сводка файла минидампа отображается сводка и сведения о модулях для файла дампа, а также действия, которые можно выполнить.
В разделе Действия:
- чтобы задать расположения для загрузки символов, выберите Set symbol paths (Задать пути к символам);
- чтобы начать отладку, выберите Debug with Managed Only (Отладка только с управляемым кодом), Debug with Native Only (Отладка только с машинным кодом), Debug with Mixed (Отладка со смешанным кодом) или Debug with Managed Memory (Отладка с управляемой памятью).
Поиск файлов EXE, PDB и исходных файлов
Для использования всех возможностей отладки в файле дампа Visual Studio требуются следующие файлы.
- EXE-файл, для которого был создан дамп, и другие двоичные файлы (DLL и т. п.), использовавшиеся процессом дампа.
- Файлы символов ( .pdb) для EXE-файлов и других двоичных файлов.
- EXE- и PDB-файлы, в точности соответствующие версии и сборке файлов, использовавшихся при создании дампа.
- Исходные файлы для соответствующих модулей. Если не удается найти исходные файлы, можно использовать дизассемблирование модулей.
Если в дампе содержатся данные кучи, Visual Studio может обойтись без двоичных файлов для некоторых модулей, но необходимы двоичные файлы для достаточного количества модулей, чтобы создавать допустимые стеки вызовов.
Пути поиска для EXE-файлов
Visual Studio автоматически ищет EXE-файлы, не включенные в файл дампа, в следующих расположениях.
- В папке, содержащей файл дампа.
- В пути к модулю, указанному файлом дампа (это путь к модулю на компьютере, на котором был собран дамп).
- В путях к символам, указанных в разделе Инструменты (или Отладка) >Параметры >Отладка >Символы. Можно также открыть страницу Символы из панели Действия окна Сводка файла дампа. На этой странице можно добавить другие расположения для поиска.
Использование страниц No Binary, No Symbols или No Source Found
Если Visual Studio не может найти файлы, необходимые для отладки модуля в дампе, отображается соответствующая страница No Binary Found (Двоичные файлы не найдены), No Symbols Found (Символы не найдены) или No Source Found (Исходные файлы не найдены). На этих страницах содержатся подробные сведения о причине проблемы, а также ссылки на действия, которые могут помочь найти файлы. См. статью Указание файлов символов (.pdb) и файлов с исходным кодом в отладчике Visual Studio.
A dump file is a snapshot that shows the process that was executing and modules that were loaded for an app at a point in time. A dump with heap information also includes a snapshot of the app's memory at that point.
Opening a dump file with a heap in Visual Studio is something like stopping at a breakpoint in a debug session. Although you can't continue execution, you can examine the stacks, threads, and variable values of the app at the time of the dump.
Dumps are mostly used to debug issues from machines that developers don't have access to. You can use a dump file from a customer's machine when you can't reproduce a crash or unresponsive program on your own machine. Testers also create dumps to save crash or unresponsive program data to use for more testing.
The Visual Studio debugger can save dump files for managed or native code. It can debug dump files created by Visual Studio or by other apps that save files in the minidump format.
Requirements and limitations
- To debug dump files from 64-bit machines, Visual Studio must be running on a 64-bit machine.
- Visual Studio can debug dump files of managed apps from Linux OS.
Visual Studio can debug dump files of native apps from ARM devices. It can also debug dumps of managed apps from ARM devices, but only in the native debugger.
To debug kernel-mode dump files or use the SOS.dll debugging extension in Visual Studio, download the debugging tools for Windows in the Windows Driver Kit (WDK).
Visual Studio can't debug dump files saved in the older, full user-mode dump format. A full user-mode dump is not the same as a dump with heap.
Debugging dump files of optimized code can be confusing. For example, compiler inlining of functions can result in unexpected call stacks, and other optimizations might change the lifetime of variables.
Dump files with or without heaps
Dump files may or may not have heap information.
Dump files with heaps contain a snapshot of the app's memory, including the values of variables, at the time of the dump. Visual Studio also saves the binaries of loaded native modules in a dump file with a heap, which can make debugging much easier. Visual Studio can load symbols from a dump file with a heap, even if it can't find an app binary.
Dump files without heaps are much smaller than dumps with heaps, but the debugger must load the app binaries to find symbol information. The loaded binaries must exactly match the ones running during dump creation. Dump files without heaps save the values of stack variables only.
Create a dump file
While you are debugging a process in Visual Studio, you can save a dump when the debugger has stopped at an exception or breakpoint.
With Just-In-Time Debugging enabled, you can attach the Visual Studio debugger to a crashed process outside of Visual Studio, and then save a dump file from the debugger. See Attach to running processes.
To save a dump file:
While stopped at an error or breakpoint during debugging, select Debug > Save Dump As.
In the Save Dump As dialog box, under Save as type, select Minidump or Minidump with Heap (the default).
Browse to a path and select a name for the dump file, and then select Save.
You can create dump files with any program that supports the Windows minidump format. For example, the Procdump command-line utility from Windows Sysinternals can create process crash dump files based on triggers or on demand. See Requirements and limitations for information about using other tools to create dump files.
Open a dump file
In Visual Studio, select File > Open > File.
In the Open File dialog box, locate and select the dump file. It will usually have a .dmp extension. Select OK.
The Minidump File Summary window shows summary and module information for the dump file, and actions you can take.
Under Actions:
- To set symbol loading locations, select Set symbol paths.
- To start debugging, select Debug with Managed Only, Debug with Native Only, Debug with Mixed, or Debug with Managed Memory.
Find .exe, .pdb, and source files
To use full debugging features on a dump file, Visual Studio needs:
- The .exe file the dump was created for, and other binaries (DLLs, etc.) that the dump process used.
- Symbol (.pdb) files for the .exe and other binaries.
- The .exe and .pdb files that exactly match the version and build of the files at dump creation.
- Source files for the relevant modules. You can use the disassembly of the modules if you can't find the source files.
If the dump has heap data, Visual Studio can cope with missing binaries for some modules, but it must have binaries for enough modules to generate valid call stacks.
Search paths for .exe files
Visual Studio automatically searches these locations for .exe files that aren't included in the dump file:
- The folder that contains the dump file.
- The module path the dump file specifies, which is the module path on the machine that collected the dump.
- The symbol paths specified in Tools (or Debug) >Options >Debugging >Symbols. You can also open the Symbols page from the Actions pane of the Dump File Summary window. On this page, you can add more locations to search.
Use the No Binary, No Symbols, or No Source Found pages
If Visual Studio can't find the files it needs to debug a module in the dump, it shows a No Binary Found, No Symbols Found, or No Source Found page. These pages provide detailed information about the cause of the issue, and provide action links that can help you locate the files. See Specify symbol (.pdb) and source files.
В примере, описанном в этой статье, проблема заключается в том, что приложение не отвечает на запросы своевременно.
Открытие дампа памяти в Visual Studio
Откройте дамп памяти в Visual Studio с помощью команды меню Файл > Открыть > Файл и выберите дамп памяти.
Обратите внимание, что на странице сводки дампа памяти в разделе Действие отображается пункт Выполнить диагностический анализ.
Выберите это действие, чтобы запустить отладчик и открыть новую страницу Диагностический анализ со списком доступных параметров анализатора, упорядоченных по базовым симптомам.
Выбор и выполнение анализаторов для дампа
Для изучения этих симптомов в разделе Скорость реагирования процесса доступны варианты, которые наиболее точно соответствуют проблеме в нашем примере.
Анализатор представит результаты на основе сведений о процессе и данных CLR, полученных в дампе памяти.
Просмотр результатов анализатора
В нашем примере анализатор обнаружил две ошибки. Выберите результат анализатора, чтобы просмотреть сводку анализа и предлагаемое исправление.
В разделе Сводка анализа указано, что пул потоков CLR испытывает нехватку ресурсов. Согласно этой информации предполагается, что среда CLR использовала все доступные потоки пула потоков. Это означает, что служба не сможет отвечать на новые запросы, пока поток не будет освобожден.
Исправление в нашем примере — это рекомендация не выполнять синхронное ожидание мониторов, событий, задач или других объектов, которые могут блокировать поток, и проверить, можно ли обновить метод как асинхронный.
Переход к проблемному коду
Следующим заданием является поиск проблемного кода.
Когда вы щелкнете ссылку Показать стек вызовов, Visual Studio немедленно переключится на потоки, которые демонстрируют это поведение.
В окне Стек вызовов отобразятся методы, которые могут быстро отличить пользовательский код (SyncOverAsyncExmple. ) от кода платформы (System. ).
Каждый кадр стека вызовов соответствует методу. Когда вы дважды щелкнете кадр стека, Visual Studio перейдет к коду, выполнение которого приводит непосредственно к описанному сценарию в этом потоке.
В нашем примере нет символов или кода, но на странице Символы не загружены можно выбрать вариант Декомпилировать исходный код .
В декомпилированном источнике ниже асинхронная задача (ConsumeThreadPoolThread) вызывает синхронную блокирующую функцию.
Метод DoSomething() содержит метод WaitHandle.WaitOne, который блокирует текущий поток пула потоков до получения сигнала.
Чтобы ускорить реагирование приложений, важно снять блокировку синхронного кода из всех асинхронных контекстов.
Я использую Visual Studio 2010 Professional Edition и Windows Vista.
во-первых, у меня есть этот код. Как вы можете видеть, это приведет к сбою программы!
программа аварийно завершит работу над инструкцией if. Теперь я хочу узнать, что он разбился на этом заявлении if.
Если я "начну без отладки" из Visual Studio, сбой.ехе падает. Он использует 1,356 КБ памяти. Я получаю опцию Vista закрыть программу / отладку. Если я выберу Debug, я могу открыть новый экземпляр Visual Studio, и он указывает мне на исключение NullReferenceException в инструкции if. Это хорошо.
теперь позвольте мне предположить, что он падает на другом компьютере, и я получаю их, чтобы дать мне файл дампа через Диспетчер задач. Это 54,567 КБ. Почему такой большой? Он огромен! Во всяком случае, меня это меньше интересует (немного)
Если я открою эту свалку с Windbg, я получу очень мало пользы для моего нетренированного глаза:
однако это представляет для меня меньший интерес. Же далеко как я могу сказать, мне нужно писать команды, чтобы получить полезный результат, и Visual Studio лучше.
поэтому я открываю его с помощью Visual Studio. Я могу выбрать "отлаживать только с Native", но я получаю много вещей, которые что-то значат для умных людей, таких как вы, и я не умный! Я получаю эти два экрана:
Итак, мой вопрос:
Как показать Visual Studio в исходном коде?
также, есть ли способ получить файл дампа меньшего размера? Кажется невероятно большим, даже после сжатия. Я не понимаю, почему не может быть такого, который только немного больше, чем след программы, и все равно получить хорошую отладку с исходным кодом.
что касается отладки только с native, Visual Studio не более полезна, чем WinDbg.
инструмент, который вы используете здесь, никогда не был разработан для устранения сбоев управляемых программ. Minidumps и Windbg-это то, что вы используете, чтобы узнать, что не так с кодом, написанным на C или c++. Довольно важные инструменты, это языки, в которых время выполнения не поддерживает те лакомства, которые вы можете получить из сбоя управляемой программы. Как исключение с трассировкой стека.
причина размеры minidump настолько различны из-за mini в minidump. Намеренно, он должен был запечатлеть небольшой моментальный снимок процесса. Соответствующий аргумент DumpType в функция MiniDumpWriteDump. В этой функции есть очень умный код, который может выяснить, какие части состояния процесса не нужно записывать, потому что вы вряд ли будете использовать его в сеансе отладчика. Который можно переопределить, предоставив дополнительные флаги типа дампа. Minidump, который генерирует Explorer, имеет все эти флаги, вы получаете весь комплект и компания.
что на самом деле очень важно для управляемой программы. Эвристика, используемая этим создателем minidump, подходит только для неуправляемого кода. Отладка управляемого дампа программы работает только тогда, когда вы включаете всю собранную кучу мусора в дамп. Да, это будет большая свалка, mini больше не применяется.
есть надстройка Windbg под названием sos.dll, которая расширяет набор команд Windbg, чтобы иметь возможность проверять управляемые данные. Просто google " sos.dll " to получай хорошие удары. Это, однако, все еще столько вдали от отладочного опыта, который вы получите из отладчика Visual Studio. Который хорошо знает управляемый код, в отличие от Windbg или отладчика VS, который может загружать мини-дампы. Sos был действительно разработан для устранения ошибок CLR.
вы должны предоставить соответствующий файл pdb (program database) отладчику, чтобы он мог загружать символы. Кроме того, чтобы получить лучшее представление, используйте Microsoft Public Symbol server. в этой статье содержит информацию об этом.
Читайте также: