Не удалось найти модуль 'mscorwks.dll'

В целом невозможно сделать. Вот один особенно противный случай:

struct Point2d {
    int x;
    int y;
};

struct Point3d {
    int x;
    int y;
    int z;
};

void dump(Point3 *p)
{
    printf("[%d %d %d]\n", p->x, p->y, p->z);
}

Point2d points[2] = { {0, 1}, {2, 3} };
Point3d *p3 = reinterpret_cast<Point3d *>(&points[0]);
dump(p3);

На многих платформах, это распечатает:

[0 1 2]

Вы вынуждаете систему во время выполнения неправильно интерпретировать биты памяти, но в этом случае она не собирается отказывать, потому что биты все имеют смысл. Это - часть дизайна языка (взгляд на полиморфизм C-стиля с struct inaddr, inaddr_in, inaddr_in6), таким образом, Вы не можете надежно защитить от него ни на какой платформе.

30
задан Drew Gaynor 14 November 2013 в 18:14
поделиться

3 ответа

Не добавляйте .dll, попробуйте просто .loadby sos mscorwks

13
ответ дан 27 November 2019 в 22:56
поделиться

Если у вас есть каталог .NET framework (например, c: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727) на вашем пути, вы можете просто использовать

.load sos
2
ответ дан 27 November 2019 в 22:56
поделиться

У меня тоже была эта проблема, и она оказалась из-за того, что отладчик взламывал приложение до загрузки CLR. Мне пришлось позволить приложению работать дальше, прежде чем я смог что-либо сделать.

Выполнение этого в windbg может помочь:

sxe ld:mscorlib
g
(... breaks again ...)
.loadby sos mscorwks

'sxe ld: ..' останавливается при загрузке модуля.

Как упоминает Сиксто, если вы отлаживаете приложения dotnet 4, вам необходимо заменить последнюю строку на

.loadby sos clr
19
ответ дан 27 November 2019 в 22:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: