Autor Beitrag
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1355
Erhaltene Danke: 190


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Fr 09.06.17 18:50 
Hallo Programmierfreunde!

Allmählich komme ich mir selber schon lästig vor, aber ich komme nun wirklich nicht mehr weiter.

Wie hier im Forum gelernt, bestücke ich in C++ ein Array erfolgreich mit:

ausblenden Quelltext
1:
2:
const int init_values[] = {3, 2, 1};
std::vector<int> values(init_values,init_values + sizeof(init_values)/sizeof(init_values[0]));


Ich muß im Überwachungsfenster des Debuggers des Visual Studios 2005 nur "init_values" und/oder "values" eingeben, automatisch kann ich daraufhin das Array mit der richtigen Länge (3 Elemente) aufklappen, die Werte erscheinen.

Anschließend tauche ich in die Sortierprozedur

ausblenden Quelltext
1:
gfx::timsort(values.begin(), values.end(), std::less<int>());					


ein.

Doch schon in dieser direkt untergeordneten, hineingetauchten Sortierprozedur

ausblenden Quelltext
1:
2:
inline void timsort(RandomAccessIterator const first, RandomAccessIterator const last, LessFunction compare)
{TimSort<RandomAccessIterator, LessFunction>::sort(first, last, compare);}


gehen die Debugger-Anzeigeprobleme los. Gebe ich "first" in die Liste der überwachten Ausdrücke ein, gelange ich über eine verschachtelte Struktur nur an den ersten Wert des Arrays. Nun habe ich mir bei ähnlichen Datenstrukturen (Listen?) teilweise so zu helfen gewußt:

Zitat:
first, 3


oder einzeln

Zitat:
*(first + 1)
,
Zitat:
*(first + 2)


usw., doch das führt hier leider nicht zum Erfolg (Bildschirmkopien können auf Wunsch nachgereicht werden).

Kurzum, ist es irgendwie möglich, die Nachfolgewerte von "first" vom Debugger zu erfahren?

Danke für Eure Geduld und Gruß

Delphi-Laie

Edit: Einzeln

Zitat:
first[0]
,
Zitat:
first[1]
usw. funktioniert es auch nicht (nur beim 1. Wert, also bei frist[0]).


Zuletzt bearbeitet von Delphi-Laie am Fr 09.06.17 21:36, insgesamt 4-mal bearbeitet
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1578
Erhaltene Danke: 286

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Fr 09.06.17 20:57 
Guten Abend Delphi-Laie,

den Breakpoint müsstest du in der Zeile: gfx::timsort(values.begin(), values.end(), std::less<int>()); setzen
... im Anschluss debuggen und dann im Einzelschritt debuggen. Ich seh dann, dass init_values[] eine Länge von 3 hat, sowie die Werte für values[0] = 3; bis values[2] = 1;
Irgendwann kommt ein Absturz zustande, und das wars schon.

_________________
„Wo andere blind der Wahrheit folgen, denk daran ... Nichts ist wahr!" (Assassin's Creed I-II)

Für diesen Beitrag haben gedankt: Delphi-Laie
Delphi-Laie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1355
Erhaltene Danke: 190


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Fr 09.06.17 21:28 
Guten Abend, Frühlingsrolle, vielen Dank, daß Du Dich meiner wieder annimmst!

So ganz verstehe ich Deine Fehlermeldung "ein Absturz" nicht.

Falls Du ein hier schon veröffentlichtes Projekt als Grundlage für diese Deine Aussage nahmst, das ist obsolet, hier im Anhang ist das aktuelle mitsamt den beiden Breakpoints. Es läuft im VS 2005 und stürzt nicht ab. Der Algorithmus scheint auch zu funktionieren, jedenfalls tat er das mit 3 und mit 32 Elementen bisher korrekt.

Ich wüßte nur zu gern, wie man im Debugger an die anderen Arraywerte gelangt, sobald man "in das Reich des Timsorts eintaucht", falls deren Anzeige überhaupt möglich ist, wie schon im 1. Beitrage schon ausführlicher beschrieben.

Nochmals danke für Deine Hilfsbereitschaft und Geduld!

Gruß

Delphi-Laie
Einloggen, um Attachments anzusehen!
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1578
Erhaltene Danke: 286

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Fr 09.06.17 23:04 
So wie ich es eben gesagt habe. Einen einzigen Haltepunkt an jener Stelle setzen:

cpp_Debugging

Ist der Druchlauf zuende, werden aus 3-2-1, 1-2-3
Einloggen, um Attachments anzusehen!
_________________
„Wo andere blind der Wahrheit folgen, denk daran ... Nichts ist wahr!" (Assassin's Creed I-II)
Delphi-Laie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1355
Erhaltene Danke: 190


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Sa 10.06.17 06:34 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
So wie ich es eben gesagt habe. Einen einzigen Haltepunkt an jener Stelle setzen:

[Bild: cpp_Debugging]

Ist der Druchlauf zuende, werden aus 3-2-1, 1-2-3


Das ist mir alles klar, Frühlingsrolle, und das war deshalb nicht meine Frage. Ich verstehe nicht, wieso trotz meiner Ausführlichkeit mein Anliegen so schwer verständlich ist. Ich habe im Verlaufe einiger Jahre schon einige C++- und Java-Projekte per Debuggen "durchgesteppt". Also ganz so unbedarft bin ich nicht.

Nur, was passiert mit dieser Datenstruktur "intern"? Ihre Änderungen muß ich nachverfolgen können. Deshalb schrieb ich doch, daß ich schon in der ersten aufgerufenen Prozedur nicht mehr an diese Aneinanderreihung der Werte herankomme und sie deshalb nicht angezeigt bekomme.

Mit einem solchen expliziten Vektor hatte ich bisher erst einmal zu tun, damals hatte ich allerdings diese Anzeigeschwierigkeit nicht. War nach meiner Erinnerung ein Java C++-Projekt.

Wenn es partout niemand weiß, dann muß ich es mit einer anderen Datenstruktur versuchen, einer, die man wenigstens im Debugger zu sehen bekommt.

Danke und Gruß

Delphi-Laie

Edit: Um zu verdeutlichen, was ich meine, hier im Anhang nun die erste Bildschirmkopie. Mit Ach und Krach komme ich über den Eintrag "_Myptr" noch an den ersten Wert (3), aber weder an die 2 noch an die 1. Alles weitere ist nur wild verkettet und verzeigert.
Einloggen, um Attachments anzusehen!
Delphi-Laie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1355
Erhaltene Danke: 190


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Di 13.06.17 12:40 
Nur zur Ergänzung: Ich fragte auch in zwei anderen (C++ -)Foren nach, weil mir das keine Ruhe ließ. In dem einen bekam ich einen entscheidenden Hinweis.

Die dort angegebenen Debugger-/Debugging-Optionen hat (mein) VS 2012 noch nicht, und VS 2015 benötigt schon wieder etwas neueres als Windows 7 als Unterbau, das ich natürlich derzeit nicht installiert habe - wozu auch?! Schluß damit, ich habe es satt, mich von MS so treiben und gängeln zu lassen. Wie man mit einem solchen VS, das einen Vektor nach einer Übergabe an einen RandomAccessIterator zu verbergen weiß, vernünftig oder gar produktiv arbeiten kann, ist mir rätselhaft, ich kann es jedenfalls nicht. Vermutlich wurden die C++-Dateien mit einer anderen Programmierumgebung erstellt. Abgesehen davon, hat schon VS 2012 an dem Projekt wieder etwas auszusetzen, was ich ohne Forumshilfe vermutlich wieder nicht ausgeglichen bekäme. Man könnte einen Rappel bekommen.

Zum Glück wurde mir ja gestern abend entscheidend geholfen, so daß ich den Algorithmus in einer anderen Programmiersprache und mit einer anderen Programmierumgebung erforschen kann.

Vielen Dank für Dein Bemühen, Frühlingsrolle!


Zuletzt bearbeitet von Delphi-Laie am Di 13.06.17 13:52, insgesamt 3-mal bearbeitet

Für diesen Beitrag haben gedankt: Frühlingsrolle
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1578
Erhaltene Danke: 286

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Di 13.06.17 13:37 
Gern geschehen. C++ Projekte zu übersetzen, wäre empfehlenswert, wenn es keine vergleichbaren Projekte in anderen Sprachen gäbe, oder wenn man Codefragmente braucht, die einen bestimmten Vorteil erzielen. Ansonsten sollte man mächtig viel Erfahrung mitbringen.

_________________
„Wo andere blind der Wahrheit folgen, denk daran ... Nichts ist wahr!" (Assassin's Creed I-II)

Für diesen Beitrag haben gedankt: Delphi-Laie
Delphi-Laie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1355
Erhaltene Danke: 190


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Di 13.06.17 13:44 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Ansonsten sollte man mächtig viel Erfahrung mitbringen.


Die habe ich leider nicht. Auf der anderen Seite lernt man nur dann etwas, wenn man sich mit Sachen beschäftigt, die man noch nicht beherrscht.

Wiederum leider, sind die meisten Quellcodes nach meiner Wahrnehmung in C oder einem Derivat davon geschrieben. Man kommt also kaum daran vorbei, wenn man sich mit neuen Algorithmen beschäftigen möchte, denn nicht für alles gibt es ausführliche Scripte, und die zu verinnerlichen, ist meistens noch anstrengender und langwieriger, als einen Algorithmus "einfach nur zu übersetzen".