سؤال

أحب التصحيح في MATLAB باستخدام الأوامر. بعض الأسئلة:

  1. إذا اخترت مكدسًا ، فهل من الممكن القفز إلى مكدس معين مباشرةً بدلاً من تحريك مكدس واحد تلو الآخر باستخدام DBUP و DBDown؟
  2. بعد القفز إلى مجموعة متوسطة ، إذا قمت بتنفيذ بعض الأوامر ، فلماذا يعود تلقائي إلى المكدس الداخلي؟ هل يمكنني البقاء في المكدس الأوسط حتى أصدر أمرًا للمغادرة للحصول على كومة أخرى؟
هل كانت مفيدة؟

المحلول

1) ليس من لوحة المفاتيح. إذا كنت تستخدم المحرر وعرض شريط أدوات المحرر ، فهناك منسد "مكدس" يعرض لك مكدس الاتصال بالكامل ، ويمكنك القفز إلى مستوى تعسفي. قد تكون قادرًا على اختراق DBUP/DBDown على مستوى N من خلال النظر إلى ما هو في هذا القائمة المنسدلة ، ولكن من الصعب للغاية السيطرة .

2) إذا قمت بإصدار أمر من موجه التصحيح "K >>" ، عندما ينتهي ، يجب أن يعيد لك مستوى المكدس الذي أصدرته منه ، كما تتوقع. هل لا يزال لديك نقطة التوقف في المستوى السفلي من الكود؟ ربما كنت في الواقع ترى موجة أخطاء ثانوية "K >>" من نقطة توقف في مكدس المكالمات المتداخلة. يمكنك بشكل أساسي الحصول على سياقات تصحيح الأخطاء المتداخلة المتعددة.

علي سبيل المثال:

function f1
f2();
function f2()
f3();
function f3()
f4();
function f4()
disp('Hello world');

إذا رميتها في مصحح الأخطاء مثل هذا ، فسوف تضغط على نقطة التوقف في أسفل مكدس المكالمات الذي تم إطلاقه من جلسة التصحيح الأصلية.

>> dbstop in f1 at 8
>> f1()
8   disp('Hello world');
K>> dbup
In workspace belonging to f1>f3 at 6
K>> dbup
In workspace belonging to f1>f2 at 4
K>> f1()
8   disp('Hello world');
K>> dbstack
> In f1>f4 at 8
  In f1>f3 at 6
  In f1>f2 at 4
  In f1 at 2
  In f1>f4 at 8
  In f1>f3 at 6
  In f1>f2 at 4
  In f1 at 2
K>> 

إن القيام بـ DBQUIT (الخروج من جلسة تصحيح الأخطاء المتداخلة) يعيدك إلى منتصف مكدس المكالمات الأصلي حيث توقفت.

K>> dbquit
K>> dbstack
  In f1>f4 at 8
  In f1>f3 at 6
> In f1>f2 at 4
  In f1 at 2
K>> 

إذا قمت بإخراج DBCONT من "k >>" ، فستستأنف تدفق التحكم من أسفل مكدس المكالمة ، حيث تم رفع نقطة التوقف في الأصل ، بغض النظر عن إطار المكدس الذي يبحث عنه K >>. لا يمكنك استخدام مصحح الأخطاء لتغيير تدفق التحكم في رمز الخط الرئيسي الذي يتم تنفيذه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top