Megosztás a következőn keresztül:


Párhuzamos diagnosztikai eszközök (egyidejűségi futtatókörnyezet)

A Visual Studio széles körű támogatást nyújt a többszálas alkalmazások hibakereséséhez és profilkészítéséhez.

Hibakeresés

A Visual Studio hibakeresője tartalmazza a Párhuzamos halmok ablakot, a Párhuzamos feladatok ablakot és a Párhuzamos figyelő ablakot. További információ : Útmutató: Párhuzamos alkalmazások hibakeresése és útmutató: A párhuzamos figyelőablak használata.

Profilkészítés

A profilkészítési eszközök három adatnézetet biztosítanak, amelyek grafikus, táblázatos és numerikus információkat jelenítenek meg arról, hogy egy többszálas alkalmazás hogyan kommunikál önmagával és más programokkal. A nézetek segítségével gyorsan azonosíthatja a problémás területeket, és navigálhat a grafikus kijelzők pontjairól a hívásveremekhez, a híváswebhelyekhez és a forráskódhoz. További információért lásd: Egyidejűség-vizualizáló.

Eseménykövetés

Az egyidejűségi futtatókörnyezet a Windows eseménykövetést (ETW) használja, hogy értesítse az instrumentációs eszközöket, például a profilkészítőket, amikor különböző események történnek. Ezek az események közé tartozik az ütemező aktiválása vagy inaktiválása, a környezet kezdete, vége, blokkok, blokkolások vagy hozamok feloldása, valamint egy párhuzamos algoritmus kezdete vagy vége.

Az olyan eszközök, mint az Egyidejűség-vizualizáció , ezt a funkciót használják; ezért általában nem kell közvetlenül dolgoznia ezekkel az eseményekkel. Ezek az események azonban akkor hasznosak, ha egyéni profilkészítőt fejleszt, vagy ha olyan eseménykövető eszközöket használ, mint például a Windows teljesítményeszközkészlete.

Az egyidejűségi futtatókörnyezet csak akkor indítja el ezeket az eseményeket, ha a nyomkövetés engedélyezve van. Hívja meg a concurrency::EnableTracing függvényt az eseménykövetés engedélyezéséhez, és a concurrency::DisableTracing függvényt a nyomkövetés letiltásához.

Az alábbi táblázat azokat az eseményeket ismerteti, amelyeket a futtatókörnyezet az eseménykövetés engedélyezésekor indít el:

Esemény Leírás Érték
egyidejűség::ConcRT_ProviderGuid Az egyidejűségi futtatókörnyezet ETW-szolgáltatóazonosítója. f7b697a3-4db5-4d3b-be71-c4d284e6592f
egyidejűség::ContextEventGuid A környezetekhez kapcsolódó események megjelölése. 5727a00f-50be-4519-8256-f7699871fecb
egyidejűség::PPLParallelForEventGuid Az concurrency::parallel_for algoritmus hívásainak belépési és kilépési pontját jelöli. 31c8da6b-6165-4042-8b92-949e315f4d84
egyidejűség::PPLParallelForeachEventGuid Az konkurencia::parallel_for_each algoritmus hívásainak be- és kilépését jelöli. 5cb7d785-9d66-465d-bae1-4611061b5434
egyidejűség::P PLParallelInvokeEventGuid A concurrency::parallel_invoke algoritmus hívásainak belépési és kilépési pontját jelöli. d1b5b133-ec3d-49f4-98a3-464d1a9e4682
egyidejűség::SchedulerEventGuid Megjelöli a Tevékenységütemezőhöz kapcsolódó eseményeket. e2091f8a-1e0a-4731-84a2-0dd57c8a5261
egyidejűség::VirtualProcessorEventGuid Megjelöli a virtuális processzorokhoz kapcsolódó eseményeket. 2f27805f-1676-4ecc-96fa-7eb09d44302f

Az egyidejűségi futtatókörnyezet a következő eseményeket határozza meg, de jelenleg nem emeli ki. A futtatókörnyezet a következő eseményeket foglalja le későbbi használatra:

A párhuzamosság::ConcRT_EventType felsorolás határozza meg azokat a lehetséges műveleteket, amelyeket egy esemény követ nyomon. Az algoritmus bejáratánál például a projekt futtatási környezete aktiválja az parallel_for eseményt, és PPLParallelForEventGuid-t ad meg műveletként. Az algoritmus visszatérése előtt a futtatókörnyezet ismét kiváltja az parallel_for eseményt, és műveletként biztosítja PPLParallelForEventGuid.

Az alábbi példa bemutatja, hogyan engedélyezheti a nyomkövetést a híváshoz parallel_for. A futtatókörnyezet nem követi nyomon az első hívást parallel_for, mivel a nyomkövetés nincs engedélyezve. EnableTracing hívása lehetővé teszi, hogy a futtatókörnyezet nyomon kövesse a parallel_for második hívását.

// etw.cpp
// compile with: /EHsc 
#include <ppl.h>

using namespace concurrency;

int wmain()
{
   // Perform some parallel work. 
   // Event tracing is disabled at this point.
   parallel_for(0, 10000, [](int i) {
      // TODO: Perform work.
   });

   // Enable tracing for a second call to parallel_for.
   EnableTracing();
   parallel_for(0, 10000, [](int i) {
      // TODO: Perform work.
   });   
   DisableTracing();
}

A futtatókörnyezet nyomon követi, hogy hányszor hívja meg a EnableTracing és a DisableTracing. Ezért, ha többször hívja a EnableTracing-t, azt is ugyanannyiszor kell hívnia a DisableTracing a nyomkövetés letiltásához.

Lásd még

Párhuzamossági futtatókörnyezet