PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C# Stack vergrößern per PostBuild geht nicht beim direkten Debuggen


MartinB
2011-12-03, 12:28:22
Ich soll nun als Teil einer Übung den FloodFill Algorithmus programmieren. Dazu haben wir von der Uni ein vorgefertigtes Programm bekommen in welchem nur noch der Algorithmus reingeschrieben werden muss.

Da das Ding aber sehr viele Rekursionsstufen hat, erhöht ein PostBuild Ereignis den Stack auf 100mb. Natürlich ist das schlechter Programmierstil, aber genau dieses riesen Stackbedarf will man uns ja mit der Übung beibringen.
Aber genau dieses PostBuild Ereignis welches den Stack erhöht bereitet mir grade Probleme:

Es scheint so als würde es erst nach dem Start des Debuggers ausgeführt. Drücke ich F5, startet zwar das Programm, aber ohne größeren Stack. Danach bricht das Programm dankend mit einem Stackoverflow ab, aber wenn ich die komplilierte Exe außerhalb von Visual Studio aufrufe, dann rennt das Programm ohne Probleme.


Weiß vielleicht jemand wie ich VS2010 dazu überreden kann das PostBuild-Ereignis richtig aufzurufen?


http://666kb.com/i/bz6zxe6hgy1ggd0ns.png

Windows 7 Prof x64
Visual Studio 2010 Prof

PatkIllA
2011-12-03, 13:28:58
Du kannst beim erstellen eines Thread eine größere Stacksize setzen und dann dort den Algorithmus aufrufen.

Es kann durch aus sein, dass der Debugger einige Einschränkungen erzwingt.
Geht es denn, wenn du dich nach dem du das Programm gestartet hast manuell an den Prozess ranhängst?

Monger
2011-12-03, 13:35:44
Der Debugger startet ja nicht die Exe, sondern seine eigene vshost.exe . Wahrscheinlich wird hier schlicht die falsche Exe parametriert. Aber wie es richtig auszusehen hat, da bin ich leider auch gerade überfragt. Sorry.

MartinB
2011-12-03, 13:51:04
Es kann durch aus sein, dass der Debugger einige Einschränkungen erzwingt.
Geht es denn, wenn du dich nach dem du das Programm gestartet hast manuell an den Prozess ranhängst?
Ja, das funktioniert. Ist nur leider etwas umständlich.

Der Debugger startet ja nicht die Exe, sondern seine eigene vshost.exe . Wahrscheinlich wird hier schlicht die falsche Exe parametriert. Aber wie es richtig auszusehen hat, da bin ich leider auch gerade überfragt. Sorry.
Es existiert ja die Datei "Programmname.vshost.exe", welche dann ausgeführt wird. Diese liegt im gleichen Verzeichnis wie die echte Exe ($TargetPath) und müsste von dem PostBuild-Ereignis auch verändert werden.

D-Swat
2011-12-03, 13:59:27
$(TargetPath)


The absolute path name of the primary output file for the build (defined with drive, path, base name, and file extension).


von: http://msdn.microsoft.com/en-us/library/42x5kfw4%28v=VS.90%29.aspx

Beinhaltet also nur deine .exe und nicht die .vshost.exe

MartinB
2011-12-03, 14:07:34
Hm, und wie bekomme ich dann beide Exen rein?

Auch nur für die Vshost klappts nicht
c:
cd "$(DevEnvDir)"
"$(DevEnvDir)../../VC/bin/editbin" /stack:1000000000,100000000 "$(TargetDir)RasterizeFill.vshost.exe

gibt nur
Der Befehl "c:
cd "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\"
"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\../../VC/bin/editbin" /stack:1000000000,100000000 "C:\Users\XXXX\Desktop\student\bin\Debug\RasterizeFill.vshost.exe"" wurde mit dem Code 1104 beendet. RasterizeFill