جاوااسکریپت - چگونه اجرای اسکریپت را هنگام دیباگ در گوگل کروم متوقف کنیم؟


هنگام قدم زدن از طریق کد جاوااسکریپت در دیباگر گوگل کروم، چگونه میتوانم اجرای اسکریپت را متوقف کنم اگر نمیخواهم ادامه دهم؟ تنها راهی که پیدا کردم بستن پنجره مرورگر است.

فشار دادن «بارگذاری مجدد این صفحه» باعث اجرای بقیه کد میشود و حتی فرمها را مانند فشار دادن F8 «ادامه» ارسال میکند.

بهروزرسانی:

هنگام فشار دادن F5 (تازه کردن) هنگامی که یک اسکریپت متوقف شده است:

  • گوگل کروم (نسخه ۲۲) اسکریپت را اجرا میکند. اگر اسکریپت درخواست HTTP ارسال کند، پاسخ HTTP برای آن درخواست نمایش داده میشود. صفحه اصلی تازهسازی نمیشود.
  • IE 9 فقط قفل میکند. با این حال، IE یک گزینه به نام «توقف دیباگ» دارد که وقتی فشار داده میشود (مشروط بر اینکه قبلاً F5 را نزده باشید)، اجرای اسکریپت را خارج از محیط دیباگر ادامه میدهد.
  • فایرباگ دقیقا مانند کروم رفتار میکند.

بستن و سپس دوباره باز کردن پنجره مرورگر همیشه آسانترین راه بعدی نیست زیرا وضعیت جلسه مرورگر را از بین میبرد و این ممکن است مهم باشد. همچنین تمام نقاط توقف شما نیز از دست میروند.

بهروزرسانی (ژانویه ۲۰۱۴):

در حین اشکالزدایی تازهسازی کنید:

  • کروم نسخه ۳۱: اجازه میدهد اسکریپتها اجرا شوند و در نقاط توقف بعدی متوقف میشود (اما درخواستهای آژاکس را ارسال نمیکند)، سپس صفحه را تازه میکند.
  • IE 11: تازهسازی هیچ کاری انجام نمیدهد، اما میتوانید برای ادامه کلید F5 را فشار دهید.
  • فایرفاکس نسخه ۲۶: اجازه میدهد اسکریپتها اجرا شوند اما روی نقاط توقف بعدی توقف نمیکند، درخواستهای آژاکس را ارسال میکند و سپس صفحه را تازه میکند.

نوعی پیشرفت!

با دیباگ کردن به همان صفحه بروید:

  • کروم نسخه ۳۱: همانند بهروزرسانی.
  • IE 11: اسکریپتها خاتمه مییابند، جلسه مرورگر جدیدی آغاز میشود (همانند بستن و دوباره باز کردن).
  • فایرفاکس نسخه ۲۶: هیچ اتفاقی نمیافتد.

همچنین juacala یک راهکار مؤثر پیشنهاد داد. برای مثال، اگر از jQuery استفاده میکنید، اجرای delete $ از کنسول باعث توقف اجرای برنامه میشود هرگاه که هر متد jQuery مواجه شود. من این را در همه مرورگرهای بالا آزمایش کردهام و میتوانم تأیید کنم که کار میکند.

بهروزرسانی (مارس ۲۰۱۵):

در نهایت، پس از بیش از ۲ سال و تقریباً ۱۰ هزار بازدید، جواب درست توسط الکساندر ک. داده شد. گوگل کروم مدیریت وظایف خود را دارد که میتواند یک پردازش تب را بدون بستن خود تب متوقف کند و تمام نقاط توقف و سایر موارد را دست نخورده نگه دارد.

من حتی تا BrowserStack.com هم رفتم تا آن را در Chrome نسخه 22 تست کنم و متوجه شدم که حتی در آن زمان هم این به این شکل کار میکرد.

راهحل موقت Juacala هنوز هنگام اشکالزدایی در IE یا Firefox مفید است.

بهروزرسانی (ژانویه ۲۰۱۹):

ابزارهای توسعه کروم بالاخره یک روش مناسب برای متوقف کردن اجرای اسکریپت اضافه کردند که خوب است (اگرچه کمی مخفی است). برای جزئیات به پاسخ جیمز جنتس مراجعه کنید.

پاسخ شماره ۱

در کروم، "مدیریت وظیفه" وجود دارد که از طریق Shift+ESC یا از طریق قابل دسترسی است

منو → ابزارهای بیشتر → مدیر وظیفه

شما میتوانید وظیفه صفحه خود را انتخاب کرده و با فشار دادن دکمه «پایان فرآیند» آن را پایان دهید.

پاسخ شماره ۲

از آوریل ۲۰۱۸، میتوانید حلقههای بینهایت را در کروم متوقف کنید:

  1. پنل Sources را در ابزارهای توسعهدهنده باز کنید (Ctrl+Shift+I**).
  2. برای توقف اجرای اسکریپت دکمه توقف را کلیک کنید.

همچنین توجه داشته باشید به کلیدهای میانبر: F8 و Ctrl+\

پاسخ شماره ۳

بهروزرسانی آوریل ۲۰۲۰

از نسخه کروم ۸۰ به بعد، هیچکدام از پاسخهای فعلی کار نمیکنند. دکمه «توقف» قابل مشاهده نیست - برای دسترسی به آیکون توقف، باید دکمه «پخش» را طولانی فشار دهید:

پاسخ شماره ۴

یکی از راههایی که میتوانید این کار را انجام دهید این است که اسکریپت را متوقف کنید و نگاهی به کدی که بعد از مکانی که در حال حاضر متوقف شدهاید دنبال میشود بیندازید، به عنوان مثال:

var something = somethingElse.blah;

در کنسول، موارد زیر را انجام دهید:

delete somethingElse;

سپس اسکریپت را اجرا کنید: این باعث ایجاد خطای کشنده خواهد شد زمانی که تلاش کند به somethingElse دسترسی پیدا کند، و اسکریپت از کار خواهد افتاد. Voilà، شما اسکریپت را متوقف کردهاید.

ویرایش: در ابتدا، یک متغیر را حذف کردم. این کافی نیست. شما باید یک تابع یا یک شیء را حذف کنید که جاوااسکریپت سعی میکند به آن ویژگی دسترسی پیدا کند.