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?
Tady jsou některé další zdroje informací:
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).