NUnit - Minidump készítés, ha a teszt bukik exception miatt
2022-08-03T23:42:50+02:00
2022-08-03T23:42:53+02:00
2022-08-04T00:42:06+02:00
H.Lilla
Sziasztok!

Belefutottam egy nyomozhatatlannak tűnő problémába. Egy .NET 6-ot targetelő projektnél refaktor során sikerült nagyon csúnyán eltörnöm valamit, és természetesen a kódban nem látok olyan változtatást, ami a problémát okozná. NUnit alapú test case-ről van szó, ami lokálban és WSL2-n futó Ubuntuval stabilan zöld, de a CI pipeline-ban (Linux környezet) szporadikusan bukik unhandled exception miatt. Nem mindig ugyanaz a test case bukik és nem is mindig ugyanaz az exception. És SSH-n se tudok attach-olni debuggerrel, mert a CI pipeline egy temporary container-ben hajtja végre a tesztet. (Azzal még futok egy kört, hogy ezt az image-et be tudom-e szerezni magamnak.)

A célom az, hogy megértsem, milyen környezetben jelentkezik a hiba, és ehhez a stack trace nem elég, memory dump-ra lesz szükségem. Ilyen minidump-ot tudok csinálni úgy, hogy definiálom a következő environment variable-öket:

DOTNET_DbgEnableMiniDump=1 DOTNET_DbgMiniDumpName="coredump.dmp" DOTNET_DbgMiniDumpType=4 DOTNET_CreateDumpDiagnostics=1
Ez jól is működik, ha nem tesztfuttatásról van szó és crash-el a program. Csak a probléma az, hogy a dotnet-test futása során garantálva van, hogy ne legyen unhandled exception, így a szoftver sem crash-el, hogy reportálni tudja a teszt bukását. Emiatt a process nem hal meg és a .NET Core runtime nem készít nekem minidump-ot. Az ötlet az lenne, hogy készüljön artifact ezekből a minidump-okból és a PDB-kből, amit le tudok tölteni és tudok elemezni.

Van ötletetek, hogy hogyan lehetne rávenni az NUnit-ot vagy a dotnet-test-et, hogy teszt bukása esetén (az unhandled exception észlelésének idejében) előállítsa nekem ezt a dump-ot?

Addig marad a jól bevált paraszt debug, hogy megpróbálom minél több loggal teleszemetelni a kódot, de ez eddig nem volt túl eredményes.
Mutasd a teljes hozzászólást!

abcd