сохранить данные из окна памяти Visual Studio - PullRequest
29 голосов
/ 11 ноября 2010

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

Например, могу ли я сохранить данные из окна памяти в VS в шестнадцатеричный дамп, но не как ASCII?

Ответы [ 6 ]

6 голосов
/ 05 ноября 2011

user142207 проделал большую работу по исследованию внутренних компонентов VS. Я рекомендую это решение. У меня есть другой способ, который был изобретен моим коллегой, Сергеем Сергеевичем, что очень полезно:

Windows: Используйте пару функций ReadProcessMemory / WriteProcessMemory. Требуется отдельное приложение, которое вызывает эти функции с идентификатором целевого процесса, например:

dumper.exe <debugged process id> <memory_start_addr> <memory_length>

Это приложение можно вызвать непосредственно во время сеанса отладки VS (по сравнению с Linux, у которого нет такой возможности). Мы можем захватить адрес памяти в окне просмотра, а затем передать адрес в самосвал и вуаля. Как говорит пользователь 142207 в своей статье, это очень полезно в проектах с длительной перекомпиляцией.

В Linux / MacOS разные подходы. Например: из консоли gdb используйте команду dump memory. Эту команду также можно использовать непосредственно во время сеанса отладки.

5 голосов
/ 25 января 2011

Не знаю, помогает ли это, но вы можете использовать команду WinDbg .writemem. Он берет имя файла и диапазон памяти и выводит его (в двоичном виде) на диск.

2 голосов
/ 23 августа 2017

У StNickolay есть ответ, который ссылается на какой-то инструмент, называемый "dumper", но я почему-то не смог найти его в сети (также, user142207 давно исчез) Поэтому я создал тот же инструмент - он запускает запущенный процесс (даже с подключенным отладчиком) и копирует часть своей памяти в файл. Очень полезно, когда вы хотите сохранить какую-то структуру на потом и не хотите бороться с «копией» вывода VS Memory View. Наслаждайтесь!

https://github.com/Alexx999/Dumper

2 голосов
/ 13 февраля 2017

Для этого есть расширение: https://marketplace.visualstudio.com/items?itemName=OvidiuIonescu.VSDebugTool. Он открывает свою консоль в окне VisualStudio и позволяет выгружать память в файл и несколько других операций с памятью (для получения подробной информации введите «help» в консоли).

Кроме того, некоторые шестнадцатеричные редакторы (например, Hex Editor Neo ) могут просматривать память процесса как обычный файл.Может быть, вы найдете бесплатный редактор с этой функцией тоже.

1 голос
/ 21 октября 2016

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

void WriteToFile(char* name, void* buffer, size_t size)
{
    FILE* fp;
    fopen_s(&fp, name, "wb");
    fwrite(buffer, 1, size, fp);
    fclose(fp);
}

Тогда просто наберите что-то вроде этого в окне просмотра:

WriteToFile("c:\\temp\\dump.dat", buffer, len)
0 голосов
/ 02 августа 2017

Я подозреваю, что вы можете получить то, что вы хотите от ClrMD , тогда вы можете получить те же данные, что и вам.

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

Существует также этот пост в блогах MSDN: https://blogs.msdn.microsoft.com/dondu/2010/10/24/writing-minidumps-in-c/

В нем описывается, как программно создавать дампы в .NET.

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