استدعاء الوظائف أثناء تصحيح الأخطاء باستخدام Visual Studio 2005؟

StackOverflow https://stackoverflow.com/questions/271042

سؤال

إليك شيء أعلم أنه ربما يكون ممكنًا ولكني لم أتمكن من القيام به مطلقًا
في VS2005(C++)، أثناء تصحيح الأخطاء، لتتمكن من استدعاء وظيفة من الكود الذي أقوم بتصحيحه.
تعتبر هذه الميزة ضرورية في بعض الأحيان عند تصحيح أخطاء هياكل البيانات المعقدة التي لا يمكن استكشافها بسهولة باستخدام الإمكانات العادية لنافذة المراقبة فقط.
يبدو أن نافذة الساعة تسمح بكتابة استدعاءات الوظائف ولكن في كل مرة أحاول ذلك تظهر لي خطأ أو آخر.

Error: symbol "func" not found
Error: argument list does not match function
Error: member function not present

هل نجح أي شخص في جعل هذا العمل بشكل صحيح؟ما الذي أفتقده هنا؟

يحرر: من الواضح أن الوظيفة التي يتم استدعاؤها يجب أن تكون رمزًا موجودًا في النطاق الحالي الذي يوجد فيه مصحح الأخطاء.

هل كانت مفيدة؟

المحلول

حسنًا، هذا ما وجدته
CXX0040 يعني أن "The C expression evaluator does not support implicit conversions involving constructor calls."
CXX0047 يعني أن "Overloaded functions can be called only if there is an exact parameter match or a match that does not require the construction of an object."

هذا يعني أنه إذا كنت أرغب في استدعاء دالة، فلا يجب أن تحتوي أي من الوسائط على تحويل ضمني ولا يجب أن تحتاج أي من الوسائط إلى إنشاء.
يبدو أن "التحويل الضمني" في هذا السياق يتضمن أشياء تافهة مثل التحويل 'String' ل 'const String&'.
يبدو أن كلمة "البناء" تتضمن بناء نسخة تافهة.لذا فإن المرور حسب القيمة لأي شيء ليس من النوع البدائي سيؤدي إلى حدوث خطأ.

لذلك فإن هذا يترك الوظائف التي تأخذ أنواعًا أو مؤشرات بدائية فقط.
لقد اختبرت للتو هذه النظرية بنجاح.

لذا، إذا كنت تريد أن تكون قادرًا على استدعاء أسلوب من نافذة المراقبة، أضف حملًا زائدًا يأخذ المؤشرات والأوليات فقط وفي نافذة المراقبة قم بتمرير الوسيطات بشكل مناسب.لتمرير كائن ليس بدائيًا، قم بتمرير عنوانه.

نصائح أخرى

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

إذا قمت باستدعاء وظيفة في نافذة المراقبة، فتأكد من أنها مرئية ويمكن الوصول إليها من النطاق الحالي.

على حد علمي، لا يمكنك تنفيذ التعليمات البرمجية من نافذة المراقبة أثناء تصحيح أخطاء C++ غير المُدارة.يعمل هذا مع C# (وربما VB.NET وC++ المُدار، لكنني لست متأكدًا من ذلك).من المحتمل جدًا أنه يسمح بذلك لأنه يعمل مع بعض اللغات، ولكن ليس مع لغات أخرى.

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

لم أتمكن أبدًا من تمييز القواعد الدقيقة ...

لم أختبر هذا، لكنني اعتقدت دائمًا أن هذا هو الغرض من النافذة المباشرة (تنفيذ التعليمات البرمجية)

كاميرون

إنها النافذة "الفورية" التي تريدها.وأنت مقيد بما هو مرئي من حيث توجد نقطة التوقف الحالية.المتغيرات المحلية والوظائف في تلك الفئة (أو العموميات)

في تجربتي، هناك بعض أوجه القصور في النافذة المباشرة.لا يمكنك استدعاء وظائف أعضاء الفصول الدراسية الخاصة بك إذا كانت الفئات تأتي من ملف DLL مختلف، ولكن تحصل على رسائل خطأ مضللة.إذا كان هناك أي شيء في نفس DLL (على سبيل المثال.من خلال الارتباط الثابت في جميع الأشياء الأخرى)، يكون الاتصال بالأعضاء موثوقًا إلى حد ما.لكن الأشياء المعقدة قد تنجح أو لا تنجح، كما ذكر آخرون.

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