![]() |
AW: Stackoverflow finden - wenn es denn einer ist
Zitat:
|
AW: Stackoverflow finden - wenn es denn einer ist
Zitat:
Wir hatten neulich einen "Schwung" Samsung Tablets, bei denen mittels eines Samsung Algorithmus (android) alle die gleiche DeviceID (UUID) bekamen, obwohl sie natürlich unterschiedlich sein sollte. Wäre wahrscheinlich nie aufgefallen, wenn man die Geräte stückweise bei verschiedenen Händlern gekauf hätte. |
AW: Stackoverflow finden - wenn es denn einer ist
Wie kommst du eigentlich auf Stackoverflow? Was deutet konkret darauf hin?
Ich würde eher vermuten, dass du an irgendeine WinAPI-Funktion ein ungültiges Objekt übergibst, also z.B. einen ungültigen Pointer. Der Code in der ntdll versucht dann darauf zuzugreifen und es kracht. Weil es in der WinAPI kracht und nicht in deinem eigenen Programm, schlägt dein Exception-Handling nicht an und du kriegst auch keinen aussagekräftigen Call-Stack. Es muss kein Pointer sein, den du direkt übergibt. Der Pointer könnte sich auch in einem nicht korrekt initialisierten Struct verstecken. Das könnte auch erklären, warum es erst ab einer gewissen Windows-Version auftritt, weil Structs ja manchmal reservierte Felder enthalten, die erst ab einer späteren Version interpretiert werden. Vielleicht wird durch fehlende Initialisierung manchmal zufällig ein neues Flag aktiviert, welches es unter XP nicht gab, was dazu führt, dass ein anderes Feld plötzlich als Pointer interpretiert wird o.ä.. |
AW: Stackoverflow finden - wenn es denn einer ist
@himitsu: Ich habe aber doch gar keine Threads.
@Perlsau: Das wäre wohl die letzte und auch blödeste Lösung, weil mit mächtig Aufwand verbunden. Ich kann nur hoffen, dass sich der Kunde im Zweifelsfall darauf einlässt. Bevor ich diesen Schritt gehe würde ich aber gerne nichts unversucht lassen. @jobo: Ja, normalerweise würde ich durchaus zustimmen. Aber Industrie-PCs sind ja gerade deshalb 3-4 mal so teuer wie vergleichbare Consumer-Hardware, weil sie intensiven Tests unterzogen werden. Jeder einzelne. Ausgeschlossen ist es damit zwar nicht, aber dass auf 3 PCs, egal welche Programme vorher gestartet sind, verlässlich immer nur mein kleines Tool genau immer an der gleichen Stelle den kaputten Speicher trifft... da muss selbst für IT-Maßstäbe schon viel Hexerei am Werk sein :) @Namenloser: Stack-Overflow war in den von mir gefundenen Beiträgen im Netz das konsistenteste "Unterthema". Und ein Mal ist mein Programm auch wirklich mit dieser Meldung abgeschmiert! Also einfach das kleine Fensterchen, dass man von Delphi kennt: "Stapelüberlauf [OK]" (weiss nicht mehr ob auf Deutsch oder Englisch). Ich selbst benutze keine direkten WinAPI Aufrufe, es läuft alles über die VCL. Wenn, dann müsste in dieser der Fehler liegen, und seit Jahren unbemerkt geblieben sein. Das ist wirklich ein total simples Programm. Keine Threads, bis auf Strings keine dynamischen Strukturen, keine WinAPI, keine Rekursionen, Standard-Projektoptionen, nur Pagecontrol, Listbox, Edits, Labels und Images auf dem Formular, ...nichts was traditionell zu einem Stack-Overflow führen sollte. Ich bin absolut baff. Aber ich erkenne hier schon: Es scheint zumindest kein übliches Diagnose-Vorgehen zu geben in solchen Fällen. Muss ich den Kunden wohl vorerst vertrösten und später dann mal mit MadExcept/Eurekalog und/oder im Kompatibilitätsmodus laufen lassen, und hoffen dass hier was bei rum kommt. Geschlagen geben ist keine Option. |
AW: Stackoverflow finden - wenn es denn einer ist
Nja, irgendwe fing hier mit Thread an. :stupid:
Zitat:
(Timer?) Oder macht der Benutzer da grade was? Du kannst dein Programm mit Logging voll packen und dann schauen, wo dein Programm als Letztes vorbei kam und dann ab da weiter suchen. |
AW: Stackoverflow finden - wenn es denn einer ist
@Medium, Knochen statt Fleisch :-D
Schmiert das Programm auf allen PCs oder nur auf den Siemens-PCs ab? Ist in das Programm eine Art XP-Manifest einkompiliert? In diese beiden Richtungen würde ich zuerst rumstochern :duck: VG |
AW: Stackoverflow finden - wenn es denn einer ist
Zitat:
Wenn es ein IndustriePC ist, verwendet der jenseits der üblichen verdächtigen Komponenten vielleicht auch andere spezielle Hardware (inkl. Treiber). Diese Hardware (Steckkarte,.. whatever) hat- Industriepc hin oder her- per se den Nachteil, dass sie eben nicht Standard ist (Häufiger Einsatz, Reifung beim Kunden, .. Robustheit). Zufällig neulich ein Beispiel mitbekommen: USB Chips werden gern von Intel oder Renesas verbaut. Die Teilearbeiten mit völlig unterschiedlichem Verhalten bezüglich Powersave Modus. Intel macht es ganz "aggressiv", Renesas lässiger. Der Fehler geschah nun immer beim Wechsel in den Powersave Mode (USB seitig). Für den Anwender war das scheinbar zufällig bzw. von außen kein Anlass erkennbar. Die Komponente war etwas besonders teures, quasi "Industrieware". Vlt klingelt es da noch mal bei Dir, Stichwort "Powersave nach einer bestimmten Zeit" oder "teurer Industriepc" Für mich wäre die Frage einfach nur: Wie einfach und billig kann ich oder der Kunde das ausschließen, statt es nur für "unwahrscheinlich" zu erklären. Inwieweit hier Randbedingungen meines Beispiels mit Deinem Fall übereinstimmen, Thema Wahrscheinlichkeit, musst Du selbst beurteilen. |
AW: Stackoverflow finden - wenn es denn einer ist
Zitat:
Zitat:
@jobo: Wie gesagt, du hast ja prinzipiell Recht. In den PCs ist meines Wissens nach zwar keine Spezialhardware, und sie gehen auch nicht in den Stromsparmodus, aber ich hetze meinen Kunden mal in diese Richtung. @himi: Das passiert während niemand an der Kiste fummelt. Es guckt noch nichtmals einer drauf =). Feingliedriges Logging ist an sich eine gute Idee. Leider auch nur Ergebnisträchtig wenn ich hin fahre, aber das werde ich wohl als erstes tun. |
AW: Stackoverflow finden - wenn es denn einer ist
Hast Du in dem Programm die Komponente TApplicationEvents drin (unter Delphi 7 gibt's die, bei neueren weiß ich nicht).
Zitat:
Um "nicht auffindbare Fehler" zu finden, nutze ich die Jedis. Dort gibt es unter \install\JVCLInstall\Debug\ einen Dialog, der die Jedi-Fehlerbehandlung kapselt. ExceptionDlg.pas und ExceptionDlg.dfm. (Leider nicht ganz fehlerfrei, es fehlt die Konstante
Delphi-Quellcode:
Und die Routine
AnsiCrLf = #13#10;
Delphi-Quellcode:
muss geändert werden in:
begin
if ExceptionShowing then Application.ShowException(Thread.SyncException) else begin ExceptionShowing := True; try ShowException(Thread.SyncException, Thread); finally ExceptionShowing := False; end; end; end;
Delphi-Quellcode:
Ins Programm einbinden reicht, mit ausfühlicher MAP-Datei kompilieren und diese mit ausliefern.
class procedure TExceptionDialog.ExceptionThreadHandler(Thread: TJclDebugThread);
begin if ExceptionShowing then Application.ShowException(Exception(Thread.SyncException)) else begin ExceptionShowing := True; try ShowException(Exception(Thread.SyncException), Thread); finally ExceptionShowing := False; end; end; end; Ein kleines Progrämmelchen, das die Jedi-Fehlerbehandlung enthält hängt an. Der Dialog lässt sich sicherlich so anpassen, dass das Fehlerprotokoll in eine Datei geschrieben wird, die man Dir dann ggfls. per Mail schicken könnte. |
AW: Stackoverflow finden - wenn es denn einer ist
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz