Условная точка останова WinDbg после. NET GC - PullRequest
0 голосов
/ 23 апреля 2020

Я устанавливаю условную точку останова в конце цикла G C.
Программа прерывается, но не может оценить переменную GcCondemnedGeneration, поэтому программа прерывается на каждом цикле G C независимо от фактической собранной генерации .

Это команда точки останова:

> bp clr!ThreadSuspend::RestartEE ".if @@(clr!SVR::GCHeap::GcCondemnedGeneration==2) {kb} .else {g}"

Это то, что я получаю, когда точка останова ломается:

Type information missing error for SVR::GCHeap::GcCondemnedGeneration
Couldn't resolve error at 'clr!SVR::GCHeap::GcCondemnedGeneration==2) {kb} .else {g}'
clr!ThreadSuspend::RestartEE:
00007fff`145d5dfc 488bc4          mov     rax,rsp

Я перепробовал все виды изменений, но все они потерпели неудачу .
. Net на компьютере установлена ​​версия 4.6.1.
Моя программа работает с сервером g c.
Символ clr.dll успешно загружен.

Спасибо

1 Ответ

2 голосов
/ 23 апреля 2020

Мне удалось заставить его работать без использования синтаксиса выражений C ++ и только выражения MASM (где dwo используется для разыменования данных размера DWORD, таких как unsigned int):

bp clr!ThreadSuspend::RestartEE ".if (poi(clr!SVR::GCHeap::GcCondemnedGeneration)==2) {kb} .else {g}"
...