فا نیکسی

13.4. اشکال‌زدایی

این بخش نحوه ساخت و دیباگ (اشکال‌زدایی) Nix را با فعال بودن نمادهای دیباگ نشان می‌دهد.

علاوه بر این، برای دستورالعمل‌های بیشتر درباره نحوه دیباگ (اشکال‌زدایی) Nix در زمینه یک تست واحد یا تست کاربردی، به آزمایش Nix مراجعه کنید.

ساخت Nix با نمادهای دیباگ

در شل توسعه، گزینه mesonBuildType به طور خودکار روی debugoptimized تنظیم می‌شود. این کار Nix را با نمادهای دیباگ می‌سازد که برای دیباگ (اشکال‌زدایی) مؤثر ضروری هستند.

همچنین امکان ساخت بدون بهینه‌سازی برای ساخت سریع‌تر وجود دارد:

[nix-shell]$ NIX_HARDENING_ENABLE=$(printLines $NIX_HARDENING_ENABLE | grep -v fortify)
[nix-shell]$ export mesonBuildType=debug

(اولین خط به این دلیل لازم است که سخت‌سازی fortify حداقل به مقداری بهینه‌سازی نیاز دارد.)

ساخت Nix با ابزارهای پاکسازی (Sanitizers)

Nix را می‌توان با استفاده از LLVM یا GCC همراه با ابزارهای پاکسازی Address و UB ساخت. این کار هنگام اشکال‌زدایی مسائل مربوط به خرابی حافظه مفید است.

[nix-shell]$ export mesonBuildType=debugoptimized
[nix-shell]$ appendToVar mesonFlags "-Dlibexpr:gc=disabled" # Disable Boehm
[nix-shell]$ appendToVar mesonFlags "-Db_sanitize=address,undefined"

اشکال‌زدایی باینری Nix

دیباگر مورد علاقه خود را درون شل توسعه دریافت کنید:

[nix-shell]$ nix-shell -p gdb

در macOS، از lldb استفاده کنید:

[nix-shell]$ nix-shell -p lldb

راه‌اندازی دیباگر

برای اشکال‌زدایی باینری Nix، دستور زیر را اجرا کنید:

[nix-shell]$ gdb --args ../outputs/out/bin/nix

در macOS، از lldb استفاده کنید:

[nix-shell]$ lldb -- ../outputs/out/bin/nix

استفاده از دیباگر

در داخل دیباگر، می‌توانید نقاط شکست (breakpoints) را تنظیم کنید، برنامه را اجرا کنید و متغیرها را بازرسی کنید.

(gdb) break main
(gdb) run <arguments>

برای دستورالعمل‌های جامع استفاده، به مستندات GDB مراجعه کنید.

در macOS، از lldb استفاده کنید:

(lldb) breakpoint set --name main
(lldb) process launch -- <arguments>

برای دستورالعمل‌های استفاده جامع، به آموزش LLDB مراجعه کنید.

nix.dev/manual/nix/stable/development/debugging.html

نیکسی · یادداشت‌های فارسی Nix local fonts