Nejčastější dotazy k výpisům paměti

Tento článek odpovídá na nejčastější dotazy týkající se shromažďování výpisů paměti v .NET.

Proč se v Linuxu zobrazují jenom výpisy paměti, pokud [dotnet-dump](dotnet-dump.md) nebo [chybový proces](dumps.md#collect-dumps-on-crash) běží se zvýšenými oprávněními?

V systémech založených na Linuxu řídí, /proc/sys/kernel/ptrace_scope kdo může volat ptrace a jaké procesy mohou trasovat. Doporučujeme ho nastavit na 1 – to znamená, že trasované můžou používat pouze procesy ve stejném řetězci ancestry. Jakákoli hodnota vyšší, než je tato hodnota, vyžaduje zvýšení oprávnění nebo může úplně zakázat ptrace .

Proč při spuštění v kontejneru nemůžu shromažďovat výpisy paměti?

U aplikací spuštěných v rámci jakékoli technologie seccomp Open Container Initiative musí profil umožňovat volání ptrace. Například Docker používá kontejnery pod kapotou jako modul runtime kontejneru. Při inicializaci modulu runtime určuje výchozí profil seccomp, který umožňuje ptrace pouze v případě, že hostitel kontejneru má verzi jádra vyšší než 4.8 nebo pokud CAP_SYS_PTRACE byla zadána schopnost.

Proč nemůžu shromažďovat výpisy paměti v systému macOS?

Použití systému macOS ptrace vyžaduje, aby byl hostitel cílového procesu správně oprávněn. Informace o minimálních požadovaných nárocích najdete v tématu Výchozí oprávnění.

Kde najdu další informace o tom, jak můžu využít výpisy paměti k diagnostice problémů v aplikaci .NET?

Jak můžu vyřešit "Nebylo možné najít žádnou kompatibilní verzi architektury"

V Linuxu DOTNET_ROOT musí proměnná prostředí při nastavení odkazovat na správnou složku. Když odkazuje na jinou verzi .NET, dotnet-dump vždy dojde k této chybě. DOTNET_ROOT Pokud proměnná prostředí není nastavená, vytvoří se jiná chyba (Abyste mohli tuto aplikaci spustit, musíte nainstalovat .NET).