Frage

Hier ist etwas, was ich weiß, ist wohl möglich, aber ich habe es nie geschafft
zu tun In VS2005 (C ++), Während des Debuggens in der Lage sein, eine Funktion aus dem Code aufrufen, die ich debuggen.
Diese Funktion ist manchmal notwendig, wenn komplexe Datenstrukturen Debugging, die einfach nur die normalen Funktionen der Uhr Fenster werden nicht untersucht werden.
Die Uhr Fenster scheinen Schreibfunktion Anrufe zu erlauben, aber jedes Mal, wenn ich es versuchen, es gibt mir einen Fehler oder ein anderes.

Error: symbol "func" not found
Error: argument list does not match function
Error: member function not present

Hat jemand schon einmal bei der Herstellung dieser Arbeit richtig gelingen? Was ich hier fehlt?

Edit:. klar, die Funktion aufgerufen soll ein Symbol sein, dass der Debugger in dem aktuellen Bereich existiert, ist in

War es hilfreich?

Lösung

Ok, dann ist hier, was ich gefunden
CXX0040 bedeutet, dass "The C expression evaluator does not support implicit conversions involving constructor calls."
CXX0047 bedeutet, dass "Overloaded functions can be called only if there is an exact parameter match or a match that does not require the construction of an object."

So kombiniert es bedeutet, dass wenn ich eine Funktion keines der Argumente nennen möchte, sollte eine implizite Konvertierung und keines der Argumente haben sollte eine Konstruktion benötigen.
„Implizite Konvertierung“ in diesem Zusammenhang scheint triviale Dinge enthält wie 'String' zu 'const String&' konvertieren.
„Aufbau“ trivial erscheinen copy-Konstruktion aufzunehmen. so wert alles vorbei, der keine primitiver Typ ist zu einem Fehler führen wird.

So nun grundsätzlich Funktionen, die nur primitive Typen oder Zeiger nehmen.
Ich habe gerade diese Theorie erfolgreich getestet.

Also, wenn Sie wollen in der Lage sein, ein Verfahren aus dem Überwachungsfenster aufzurufen, fügen Sie eine Überlastung, die nur Zeiger und Primitiven und im Überwachungsfenster die Argumente entsprechend passieren nimmt. Um ein Objekt zu übergeben, die nicht ein primitives passieren die Adresse ist.

Andere Tipps

Die Uhr Fenster wird durch den Kontext beschränkt, bei Ihrem aktuellen Code ist, zum Beispiel, wenn Ihr Code eine Funktion tritt und Sie versuchen, eine andere Funktion zuzugreifen, die vom Umfang der aktuellen Funktion ausgeblendet ist, wird es nicht funktionieren.

Wenn Sie eine Funktion im Überwachungsfenster aufrufen, stellen Sie sicher, dass es sichtbar und zugänglich aus dem aktuellen Bereich.

Mein Wissen können Sie nicht Code aus dem Fenster beobachten ausführen, während nicht verwaltete C ++ debuggen. Dies funktioniert für C # (und wahrscheinlich VB.NET und verwaltet C ++, aber ich bin nicht positiv auf das). So dürfte es ermöglicht es, weil es für einige Sprachen funktioniert, aber andere nicht.

Wir finden dies in einem sehr hit and miss Art und Weise funktioniert. Einige sehr einfache Funktionen (inkl. Member-Funktionen) arbeiten, in der Regel einfache Eigenschaft Getter. Andere komplexere Funktionen nicht funktionieren und zu einem Fehler führen.

Ich habe nie in der Lage, die genaue Regeln zu erkennen ...

Ich habe nicht getestet, aber ich dachte immer das war, was das unmittelbare Fenster war für (Ausführung von Code)

Cameron

Es ist das „Sofort“ Fenster, das Sie wollen. Und Sie sind darauf beschränkt, was aus sichtbar ist, wo Ihre aktuellen Breakpoint. Lokale Variablen und Funktionen für diese Klasse (oder Globals)

Nach meiner Erfahrung gibt es einige Mängel mit dem sofortigen Fenster. Sie können Ihre Klassen Member-Funktionen, wenn die Klassen kommen aus einer anderen DLL nicht nennen, aber irreführende Fehlermeldungen. Wenn etwas in der gleichen DLL ist (zum Beispiel durch statisch in allen anderen Sachen in Verbindung bringen) Mitglieder fordern ist ziemlich zuverlässig. Aber komplexe Sachen können oder auch nicht, wie von anderen erwähnt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top