سؤال

يستغرق خادم البناء الخاص بنا وقتًا طويلاً جدًا لإنشاء أحد مشاريع C++ الخاصة بنا.ويستخدم فيجوال ستوديو 2008.هل هناك أي طريقة لجعل موقع devenv.com يسجل الوقت المستغرق لبناء كل مشروع في الحل، حتى أعرف أين أركز جهودي؟

الأجهزة المحسنة ليست خيارًا في هذه الحالة.

لقد حاولت تعيين إسهاب الإخراج (ضمن الأدوات/الخيارات/المشاريع والحلول/إنشاء وتشغيل/مشروع MSBuild بناء إسهاب الإخراج).لا يبدو أن هذا له أي تأثير في IDE.

عند تشغيل MSBuild من سطر الأوامر (وبالنسبة لبرنامج Visual Studio 2008، يجب أن يكون MSBuild v3.5)، فإنه يعرض إجمالي الوقت المنقضي في النهاية، ولكن ليس في IDE.

أردت حقًا الحصول على تقرير عن الوقت المستغرق لكل مشروع في الحل، حتى أتمكن من معرفة أين كانت عملية الإنشاء تستغرق وقتها.

بدلاً من ذلك، نظرًا لأننا نستخدم NAnt فعليًا لقيادة عملية البناء (نستخدم Jetbrains TeamCity)، فهل هناك طريقة لجعل NAnt يخبرني بالوقت المستغرق لكل خطوة؟

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

المحلول

قائمة طعام أدواتخياراتالمشاريع والحلولإعدادات مشروع VC++توقيت البناء يجب أن تعمل.

نصائح أخرى

انتقل إلى الأدوات ← الخيارات ← المشاريع والحلول ← البناء والتشغيل ← شرح مخرجات إنشاء مشروع MSBuild - اضبط على "عادي" أو "مفصل"، وسيظهر وقت الإنشاء في نافذة الإخراج.

فيجوال ستوديو 2012 حتى 2017

  • لمشاريع MSBuild (على سبيل المثال.كافة المشاريع الصافية):
    انقر Tools -> Options ثم حدد Projects and Solutions -> Build and Run.يتغير MSBuild project build output verbosity ل Normal.لذلك سيعرض الوقت المنقضي في كل مشروع حل ينشئه.ولكن لسوء الحظ لا يوجد مجموع الوقت المنقضي على كل المشروع.سترى أيضًا الطابع الزمني لبدء الإنشاء

  • لمشروع C/C++:

انقر Tools -> Options ثم حدد Projects and Solutions -> VC++ Project Settings.

يتغير Build Timing ل Yes.

بالنسبة لـ Visual Studio 2012، يمكنك استخدام ملف بناء مراقب امتداد.

إذا كنت عالقًا في VS2005، فيمكنك استخدام ملف مقابل البرنامج المساعد بناء الموقت.عند الانتهاء من البناء، يظهر إجمالي الوقت المستغرق وملخصًا (اختياريًا) لكل مدة من فترات المشروع.

تنصل؛لقد كتبت ذلك.ونعم، أحتاج إلى إنشاء برنامج تثبيت... يومًا ما!

الأدوات->الخيارات->المشاريع والحلول->الإنشاء والتشغيل->

اضبط "إسهاب إخراج مشروع MSBuild" من "الحد الأدنى" إلى "عادي"

نظرًا لأن سؤالك يتضمن استخدام DevEnv من سطر الأوامر، فإنني أقترح أيضًا استخدام MSBuild (والتي يمكنها إنشاء ملفات .sln بدون تعديل).

msbuild /fl /flp:Verbosity=diagnostic Your.sln

msbuild /? سوف تظهر لك خيارات أخرى مفيدة لمسجل الملفات.

إذا كنت تريد تصور البناء الخاص بك يمكنك استخدام IncrediBuild.يتوفر IncrediBuild الآن في الوضع المستقل (غير موزع ولكن للاستخدام فقط على 8 مراكز على جهازك المحلي) مجانًا كجزء من Visual Studio 2015 Update 1

تنصل:أنا أعمل في إنكريدي بيلد

انتهى بي الأمر هنا لأنني أردت فقط تضمين التاريخ والوقت في مخرجات البناء.إذا كان الآخرون يبحثون عن شيء مشابه، فالأمر بسيط مثل الإضافة echo %date% %time% إلى أحداث ما قبل الإنشاء و/أو ما بعد الإنشاء ضمن المشروع، ملكياتتجميعبناء الأحداث.

قم بالإنشاء أولاً وشاهد المشروع الذي يظهر أولاً في مخرجات الإنشاء (كنترول + بيت في نافذة الإخراج).انقر بزر الماوس الأيمن على هذا المشروع → خصائص المشروعتجميعبناء الأحداثما قبل البناءecho ###########%date% %time%#############.

لذلك في كل مرة ترى نتائج البناء (أو أثناء البناء)، افعل ذلك كنترول + بيت في نافذة الإخراج.وفي مكان ما في تلك المنطقة، يحدق الوقت والتاريخ في وجهك!

أوه، وقد ينتهي بك الأمر إلى إضافة هذه التفاصيل إلى العديد من المشاريع حيث يمكن أن يتغير ترتيب البناء :)


لقد وجدت حلا أفضل!###

أدواتخياراتالمشاريع والحلولبناء وتشغيليقوم مشروع MSBuild ببناء الإسهاب في الإخراج = عادي (أو أعلى الحد الأدنى).يؤدي هذا إلى إضافة الوقت في بداية/أعلى نافذة الإخراج. كنترول + بيت في نافذة الإخراج يجب أن تفعل.

إذا أردنا أن نرى مقدار الوقت الذي يستغرقه كل مشروع بعد ذلك المشاريع والحلولإعدادات مشروع VC++توقيت البناء = نعم.وينطبق على جميع المشاريع."VC++" مضللة.

إذا كنت تريد استدعاء برنامج خارجي يمكنه تتبع إجمالي أوقات الإنشاء، فيمكنك استخدام الحل التالي لـ VS 2010 (وربما الأقدم).يستخدم الكود أدناه CTime بواسطة Casey Muratori.بالطبع يمكنك أيضًا استخدامه لطباعة وقت الإنشاء ببساطة.

افتح مستكشف الماكرو، والصق ما يلي من قبل End Module:

Dim buildStart As Date
Private Sub RunCtime(ByVal StartRatherThanEnd As Boolean)
    Dim Arg As String
    Dim psi As New System.Diagnostics.ProcessStartInfo("ctime.exe")
    If StartRatherThanEnd Then
        psi.Arguments = "-begin"
    Else
        psi.Arguments = "-end"
    End If
    psi.Arguments += " c:\my\path\build.ctm"
    psi.RedirectStandardOutput = False
    psi.WindowStyle = ProcessWindowStyle.Hidden
    psi.UseShellExecute = False
    psi.CreateNoWindow = True
    Dim process As System.Diagnostics.Process
    process = System.Diagnostics.Process.Start(psi)
    Dim myOutput As System.IO.StreamReader = process.StandardOutput
    process.WaitForExit(2000)
    If process.HasExited Then
        Dim output As String = myOutput.ReadToEnd
        WriteToBuildWindow("CTime output: " + output)
    End If
End Sub

Private Sub BuildEvents_OnBuildBegin(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildBegin
    WriteToBuildWindow("Build started!")
    buildStart = Date.Now
    RunCtime(True)
End Sub

Private Sub BuildEvents_OnBuildDone(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildDone
    Dim buildTime = Date.Now - buildStart
    WriteToBuildWindow(String.Format("Total build time: {0} seconds", buildTime.ToString))
    RunCtime(False)
End Sub

Private Sub WriteToBuildWindow(ByVal message As String)
    Dim win As Window = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput)
    Dim ow As OutputWindow = CType(win.Object, OutputWindow)
    If (Not message.EndsWith(vbCrLf)) Then
        message = message + vbCrLf
    End If
    ow.OutputWindowPanes.Item("Build").OutputString(message)
End Sub

الجواب مأخوذ من هنا و هنا.

الخيارات -> المشاريع والحلول -> إعدادات مشروع VC++ -> توقيت البناء

enter image description here

لقد قمت بإنشاء امتداد لقياس أوقات الإنشاء وتقديم ترتيب الأحداث في الرسم البياني: مؤقت بناء الاستوديو المرئي.

enter image description here

إنه متوفر في سوق الاستوديو المرئي ويعمل مع VS2015 وVS2017.

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

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