اشکال زدایی C/C++ WebAssembly

سوفیا املیانوا
Sofia Emelianova

WebAssembly راهی برای اجرای، به عنوان مثال، کد C/C++ در وب با سرعت نزدیک به بومی و در کنار جاوا اسکریپت ارائه می دهد. این سند نحوه راه اندازی و استفاده از Chrome DevTools را برای اشکال زدایی بهتر چنین برنامه هایی نشان می دهد.

هنگامی که DevTools را راه اندازی کردید، می توانید:

  • کد اصلی خود را در منابع > ویرایشگر بررسی کنید.
  • اجرای را با نقاط شکست خط کد متوقف کنید و از کد منبع اصلی C/C++ خود عبور کنید، نه فایل باینری .wasm کامپایل شده.

و در حالی که مکث کرده اید، می توانید:

  • ماوس را روی متغیرها در فایل منبع اصلی نگه دارید و مقادیر آنها را ببینید.
  • درک نام توابع در Call Stack و متغیرها در Scope .
  • خروجی ویژگی های عمیق تو در تو و اشیاء پیچیده به کنسول .
  • حافظه شی را با Memory Inspector بازرسی کنید.

برپایی

برای فعال کردن اشکال‌زدایی C/C++ WebAssembly در DevTools:

  1. برنامه خود را با اطلاعات اشکال زدایی DWARF کامپایل کنید. آخرین کامپایلر Emscripten را اجرا کنید و پرچم -g را به آن منتقل کنید. مثلا:

    emcc -g source.cc -o app.html
    

    برای اطلاعات بیشتر، پروژه های ساختمانی با اطلاعات اشکال زدایی را ببینید.

  2. افزونه کروم C/C++ DevTools Support (DWARF) را نصب کنید.

اشکال زدایی

با راه اندازی DevTools، کد خود را اشکال زدایی کنید:

  1. DevTools را باز کنید تا وب سایت خود را بررسی کنید. برای این آموزش، می توانید آن را در این صفحه نمایشی که با پرچم -g مورد نیاز کامپایل شده است، امتحان کنید.
  2. در صورت تمایل، فایل‌هایی را که تالیف کرده‌اید گروه‌بندی کنید تا پیمایش آسان‌تر شود. در منابع ، بررسی کنید منوی سه نقطه > صفحه > چک باکس. > گروه توسط تالیف / مستقر تجربی. .
  3. فایل منبع اصلی خود را از درخت فایل انتخاب کنید. در این مورد mandelbrot.cc .
  4. برای تنظیم نقطه شکست خط کد ، روی یک شماره خط در ستون سمت چپ ویرایشگر کلیک کنید، مثلاً در خط 38.

    نقطه شکست خط کد در خط 38 تنظیم شده است.

  5. دوباره کد را اجرا کنید. اجرا قبل از خط دارای نقطه شکست مکث می کند.

در حین توقف، موارد زیر را امتحان کنید:

  • در Sources > Editor ، ماوس را روی یک متغیر نگه دارید تا مقدار آن را در یک راهنمای ابزار ببینید.

مقدار یک متغیر در یک راهنمای ابزار.

  • در Sources > Call Stack ، نام توابع را همانطور که در منبع هستند مشاهده کنید.

تابع اصلی در پشته تماس.

  • در Sources > Scope ، متغیرهای محلی و سراسری، انواع و مقادیر آنها را مشاهده کنید.

صفحه Scope با متغیرهای محلی و مقادیر آنها.

  • در کنسول ، متغیرها و اشیایی که در Scope به سختی می توان به آنها پیمایش کرد، خروجی می دهد:

    • متغیرهای عمیق تو در تو، به عنوان مثال، موارد نمایه شده در آرایه های بزرگ.
    • اشیاء پیچیده، از جمله مواردی که می توانید با اشاره گر ( -> ) به آنها دسترسی داشته باشید. آنها را برای بازرسی گسترش دهید.

یک متغیر تودرتو و یک شی پیچیده در کنسول گسترش یافته است.

  • در Sources > Scope ، روی آن کلیک کنید حافظه برای باز کردن Memory Inspector و بازرسی بایت های خام حافظه شی. برای اطلاعات بیشتر، به بازرسی حافظه WebAssembly مراجعه کنید.

بررسی حافظه یک متغیر

عملکرد پروفایل

با راه اندازی و باز کردن DevTools، کدهایی که Chrome اجرا می شود بهینه نمی شود. برای اینکه تجربه بهتری در اشکال زدایی به شما ارائه دهد ، سطح پایینی دارد.

در این مورد، نمی‌توانید برای عملکرد نمایه‌تان به console.time() و performance.now() تکیه کنید. در عوض، از پنل عملکرد برای نمایه استفاده کنید.

همچنین، می‌توانید کد پروفایل خود را بدون باز کردن DevTools اجرا کنید، سپس آن را باز کنید تا پیام‌های موجود در کنسول را بررسی کنید.

اطلاعات اشکال زدایی را از هم جدا کنید

برای سرعت بخشیدن به بارگیری اما همچنان تجربه بهتری در اشکال زدایی داشته باشید، می توانید اطلاعات اشکال زدایی را به یک فایل .wasm جداگانه تقسیم کنید. برای اطلاعات بیشتر، اشکال‌زدایی سریع‌تر WebAssembly را ببینید.

شما می توانید این فایل را به صورت محلی نگه دارید یا آن را در یک سرور جداگانه میزبانی کنید. برای انجام این کار با Emscripten، پرچم -gseparate-dwarf=<filename> را پاس کرده و مسیر فایل را مشخص کنید:

emcc -g source.cc -o app.html \
     -gseparate-dwarf=temp.debug.wasm \
     -s SEPARATE_DWARF_URL=[file://local/path/to/temp.debug.wasm] | [URL]

ساخت و اشکال زدایی روی ماشین های مختلف

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

به عنوان مثال، اگر پروژه شما در C:\src\project به صورت محلی است اما در یک ظرف Docker با مسیر /mnt/c/src/project ساخته شده است، موارد زیر را انجام دهید:

  1. به chrome://extensions/ بروید، پسوند C/C++ DevTools Support (DWARF) را پیدا کنید و روی Details > Extension options کلیک کنید.
  2. مسیرهای فایل قدیمی و جدید را مشخص کنید.

مسیرهای فایل قدیمی و جدید را مشخص کرد.

بیشتر بدانید

برای اطلاعات بیشتر در مورد اشکال زدایی WebAssembly، وبلاگ مهندسی Chrome DevTools را بررسی کنید: