[VS2008] Debugger stept meer

Pagina: 1
Acties:

  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 16-09 20:30
Ik heb een probleem zoals dit

Als ik ergens een breakpoint zet komt hij er soms, en soms ook helemaal niet. Lees als ik hem aan het begin van een functie zet, waar hij komt, hem weer laat runnen en de breakpoint bij het einde van de functie niet pakt, is een beetje gek.

Verder als ik step-over (F10) doet hij soms ook niets. Step-into laat hetzelfde zien.

Het is een WCF client. Ik weet niet of dat hierdoor komt.

if broken it is, fix it you should


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Heb je het probleem ook op een andere machine?

Dump anders even de betreffende code. Je zegt dat je wel een breakpoint bij het begin en niet bij het einde van een functie kan zetten. Misschien heb je wel een stukje code welke gewoon nooit uitgevoerd zal worden...

C#:
1
2
3
4
5
6
7
public void DoSomething()
{
   Console.WriteLine("Hello World");
   return;

   Console.WriteLine("Goodbye cruel world");
}

De twee Writeline zal in dit geval nooit uitgevoerd worden en mogelijk heb jij ook een soortgelijk probleem, alleen dan minder opzichtig..

If it isn't broken, fix it until it is..


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:16
Is het de client of de server die je debugged ?

Wat ik soms had, bij het debuggen van .NET remoting services, was dat ik helemaal niet kon debuggen.
Het weggooien van de temporary asp.net files hielp dan.

https://fgheysels.github.io/


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-09 22:43
Je zit niet toevallig in geoptimaliseerde code te steppen oid?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 16-09 20:30
Niemand_Anders schreef op donderdag 17 september 2009 @ 09:04:
Heb je het probleem ook op een andere machine?

Dump anders even de betreffende code. Je zegt dat je wel een breakpoint bij het begin en niet bij het einde van een functie kan zetten. Misschien heb je wel een stukje code welke gewoon nooit uitgevoerd zal worden...

C#:
1
2
3
4
5
6
7
public void DoSomething()
{
   Console.WriteLine("Hello World");
   return;

   Console.WriteLine("Goodbye cruel world");
}

De twee Writeline zal in dit geval nooit uitgevoerd worden en mogelijk heb jij ook een soortgelijk probleem, alleen dan minder opzichtig..
Code dumpen wordt lastig; vindt mijn bedrijf niet al te leuk...

kort door de bocht:
C#:
1
2
3
4
5
6
7
8
public void DoSomething()
{ //hier staat een breakpoint #1

   Console.WriteLine("Hello World");
   

   Console.WriteLine("Goodbye cruel world");
}//hier staat een breakpoint #2


hij komt bij breakpoint 1; beide writeline worden aangeroepen, maar komt niet bij breakpoint 2

Code is niet geoptimaliseert
Dit is de client client; maar ook als ik de cliente even uitschakel (lees aanmaken en versturen door // ) dan komt hij er niet. Het lijkt of hij niet WCF gebonden is.

[ Voor 8% gewijzigd door elgringo op 17-09-2009 09:13 ]

if broken it is, fix it you should


Verwijderd

EDIT: Dubbel post.... ruzie met post knop :o :+

[ Voor 97% gewijzigd door Verwijderd op 17-09-2009 09:24 ]


Verwijderd

elgringo schreef op donderdag 17 september 2009 @ 09:12:

C#:
1
2
3
4
5
6
7
8
public void DoSomething()
{ //hier staat een breakpoint #1

   Console.WriteLine("Hello World");
   

   Console.WriteLine("Goodbye cruel world");
}//hier staat een breakpoint #2


hij komt bij breakpoint 1; beide writeline worden aangeroepen, maar komt niet bij breakpoint 2
Lees ik het nu goed en zet je de breakpoint daadwerkelijk op de regel van de accolades? Dat gaat niet werken niet, want daar staat geen instructie. Zo heb ik wel eens gehad dat ik dit wil debuggen:

C#:
1
SomeObject o; // ik zet hier de breakpoint


Echter, dat werkt alleen als ik ook echt het object o van een default waarde voorzie. Wellicht heb je dit probleem?

Je zegt dat de code niet geoptimaliseert is, maar hoe weet je dat zeker? Dit gebeurt tijdens de compilatie en de code waar je dan je breakpoint gezet denkt te hebben, is door de compiler 'verplaatst' (bij gebrek aan een betere uitleg :) ).

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Verwijderd schreef op donderdag 17 september 2009 @ 09:23:
[...]


Lees ik het nu goed en zet je de breakpoint daadwerkelijk op de regel van de accolades? Dat gaat niet werken niet, want daar staat geen instructie. Zo heb ik wel eens gehad dat ik dit wil debuggen:

C#:
1
SomeObject o; // ik zet hier de breakpoint


Echter, dat werkt alleen als ik ook echt het object o van een default waarde voorzie. Wellicht heb je dit probleem?

Je zegt dat de code niet geoptimaliseert is, maar hoe weet je dat zeker? Dit gebeurt tijdens de compilatie en de code waar je dan je breakpoint gezet denkt te hebben, is door de compiler 'verplaatst' (bij gebrek aan een betere uitleg :) ).
Wrong. De C# compiler injecteert net voor dit soort zaken NOOP voor en na een functie zodat je er WEL op kunt breaken.

http://blogs.msdn.com/old...e/2007/08/17/4422794.aspx

[ Voor 3% gewijzigd door Snake op 17-09-2009 09:32 ]

Going for adventure, lots of sun and a convertible! | GMT-8


Verwijderd

Ok, ik corrigeer mezelf. Nu heb ik het even getest en als ik mijn breakpoint op een accolade zet dan zorgt de VS ervoor dat de breakpoint naar de eerst volgende instructie springt.

Die NOP instructie is nieuw voor mij. Zit dat ook in 1.1?

Ik blijf er wel bij dat er situaties zijn dat de code 'verplaatst' tijdens compilatie. Ik weet niet precies waardoor dit komt. Misschien dat versies niet gesynchroniseerd zijn of er idd optimalisaties hebben plaatstgevonden, maar waarschijnlijk is dat niet het geval bij de TS.

  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 13-09 21:30
Staat bij de warnings ook "Unreachable code detected"?
Of misschien perongeluk direct een ; achter een if - conditie of for - conditie gezet?

  • NC83
  • Registratie: Juni 2007
  • Laatst online: 21-08 21:44
Verwijderd schreef op donderdag 17 september 2009 @ 09:23:
[...]


Lees ik het nu goed en zet je de breakpoint daadwerkelijk op de regel van de accolades? Dat gaat niet werken niet, want daar staat geen instructie. Zo heb ik wel eens gehad dat ik dit wil debuggen:

C#:
1
SomeObject o; // ik zet hier de breakpoint


Echter, dat werkt alleen als ik ook echt het object o van een default waarde voorzie. Wellicht heb je dit probleem?

Je zegt dat de code niet geoptimaliseert is, maar hoe weet je dat zeker? Dit gebeurt tijdens de compilatie en de code waar je dan je breakpoint gezet denkt te hebben, is door de compiler 'verplaatst' (bij gebrek aan een betere uitleg :) ).
Heel simpel er staat een
code:
1
#pragma optimize off

in de file.

Genoeg gegeind in de settings van een C# project kun je optimize code aanvink geen vink daar geen optimized code in je project.
Dit sluit natuurlijk niet uit dat de .NET objecten en de functies die je daarvan gebruikt niet geoptimaliseerd zijn.

[ Voor 6% gewijzigd door NC83 op 17-09-2009 14:49 ]

ex-FE Programmer: CMR:DiRT2,DiRT 3, DiRT Showdown, GRID 2, Mad Max


  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 16-09 20:30
Ik heb dus geen; lees ECHT geen; heelmaal geen; optimalisaties aan staan. (die fout heb ik een paar jaar geleden gemaakt)

breakpoints bij het einde van de functie, de accolade, werken bij mij normaal iig wel en ga er van uit nu dus ook.

Ik heb ook geen unreachable code warnings of rare ifs. Het voorbeeld stukje code is echt zoals het is, alleen zijn de write lines andere functies die gewoon eindigen (Lees database acties, checkken of client bestaat etc) Deze functie doen het prima met de unit test. De hoofd functie ook, alleen het debuggen dus niet.

Het vreemde is wel dat hij hier soms wel stopt... Of zit er een unhidden feature in VS2008 die tijdsafhankelijk is ;)

if broken it is, fix it you should

Pagina: 1