.net - CLR crash kun, når du kører fra en PowerShell job - hvordan man diagnosticerer

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har et .NET-program, der styrter inde i CLR JIT med interne stackoverløb og fejl uden for hukommelsen, men kun , når du kører indefra a PowerShell job .


Jeg antager, at det kører det som et magtfuldt job pålægger nogle slags ressource eller sikkerhedsgrænser , der forårsager .NET CLR at gå nødder.


Den mest klare anelse, jeg kunne få, var at en af ​​disse fejl engang manifesterede sig som en undtagelse fra HRESULT, hvilket HRESULT var ERROR\_COMMITMENT\_LIMIT (sidefile udmattet), selv om der var rigtig masser af plads i sidefilen og i RAM. Andre gange er disse fejl sket i helt vilkårlig og uskyldige steder i programmet.


Hvordan kan jeg diagnosticere, hvad der sker forkert, Hvilke grænser bliver krænket ? Er der en API for at få alle begrænsninger, som en proces er genstand for? Eller er der mulighed for at opfange eller logge et WinAPI-opkald, der fejler på grund af en sikkerheds- eller kvotebegrænsning? Jeg er helt ok med at bruge endnu WinDbg til det, men jeg ved ikke, hvordan man bruger det til denne opgave.

Bedste reference


Det er usandsynligt, at PowerShell har direkte fejl her. Det pålægger ingen sikkerheds- eller CLR-modifikationer, der sendes ned til barnets processer, som den skaber.


Det ene emne PowerShell vil helt sikkert passere ned til barnet processen er miljøvariabler. Det er meget muligt, at PowerShell passerer en anden miljøvariabel end CMD, som påvirker CLR eller dit program og forårsager at det går i stykker. Jeg ville starte en CMD- og PowerShell-session og diffunde deres miljøvariabler for at udelukke dette som en årsag.


Jeg vil især være opmærksom på variablen \%PATH\%.