Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Debug DirectX εφαρμογών με το DirectX SDK και το Visual Studio 2010

Îåêßíçóå áðü ôï ìÝëïò panagiotis_georgiadis. Τελευταία δημοσίευση από το μέλος panagiotis_georgiadis στις 29-06-2010, 09:53. Υπάρχουν 2 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  28-06-2010, 11:13 59291

    Debug DirectX εφαρμογών με το DirectX SDK και το Visual Studio 2010

    Δεν ξέρω που να το βάλω αυτό το θέμα, νομίζω ότι κολλάει καλύτερα στην κατηγορία XNA.
    Θέλω απλά να κάνω μια παρατήρηση, και ίσως έμμεσα να λάβω απάντηση για το πρόβλημά μου.
    Για να δουλέψει κανείς πάνω σε μια εφαρμογή DirectX (προσωπικά δουλεύω με unmanaged κώδικα) χρειάζεται το DirectX SDK (εκτός αν ξέρει απ'έξω όλο το API). Επίσης, με το SDK εγκαθιστάται στο σύστημα και το DirectX Control Panel, όπου μπορεί κανείς να θέσει τα debug DLLs του Direct3D εν ενεργεία και να λαμβάνει μηνύματα στο output Window του Visual Studio που προέρχονται από το DirectX.
    Το πρόβλημα εμφανίζεται τη στιγμή που (δεν) διαπιστώνει κανείς ότι το Visual Studio 2010 είναι πλέον εφαρμογή WPF, άρα χρησιμοποιεί κι αυτό DirectX κώδικα (φαίνεται από την προεπιλογή Tools\Options\General\Visual Experience "...hardware acceleration...")
    Όταν λοιπόν λες στο DirectX να μπει σε debug mode, κάθε εφαρμογή που τρέχει στο PC θα χρησιμοποιήσει επίσης DirectX debug. Και το Visual Studio θα αρχίσει να γκρινιάζει και να κρασάρει. Υπάρχει ένα σχετικό bug στο Microsoft Connect, και λένε ότι πρόκειται για known issue.
    Ένας τρόπος που γλιτώνει τις πολλές φασαρίες είναι ο εξής:
    * DirectX Control Panel - set Direct3D Retail mode
    * αντιγραφή του d3d9d.dll από το φάκελο του SDK στο φάκελο όπου δημιουργείται το .exe ή το .dll της εφαρμογής που δουλεύετε.
    * μετονομασία αυτού του d3d9d.dll σε d3d9.dll
    Έτσι στην ουσία ξεγελάτε τον debugger. Αλλά το κρασάρισμα αν και τουλάχιστον μειώνεται, δεν αποφεύγεται τελείως. Δέχομαι πού και πού κάτι crash reports με περιγραφή "Problem Event Name: BEX".
    Με αυτό το post θα ήθελα να κοινοποιήσω την εμπειρία μου, και ίσως αν υπάρχει κανείς με περισσότερες γνώσεις στο αντικείμενο να με βοηθήσει να απαλλαγώ από τα crash εντελώς, αν και η κατάσταση έτσι είναι ανεκτή.

    Panagiotis Georgiadis
    HBM Netherlands B.V.
    www.twitter.com/HimWithCurls
    Δημοσίευση στην κατηγορία:
  •  29-06-2010, 02:20 59303 σε απάντηση της 59291

    Απ: Debug DirectX εφαρμογών με το DirectX SDK και το Visual Studio 2010

    Δεν μπορώ να σου πω στα σίγουρα μια που χρησιμοποιώ VS2008 για τις εφαρμογές μου σε DirectX,αλλά η λύση που ακολούθησες μου φαίνεται η καλύτερη.Όσον αφορά το σφάλμα που λαμβάνεις (buffer overflow exception) δες αν έχεις τσεκαρισμένο το "Break on memory leak" στο DirectX Control Panel και έλεγξε μήπως συσχετίζεται με αυτό.
    Μια άλλη λύση που θα μπορούσες να σκεφτείς είναι να κάνεις debug την εφαρμογή σου με το PIX,το εργαλείο που παρέχεται μαζί με το DirectX SDK,ίσως περιστασιακά σε βολέψει.

  •  29-06-2010, 09:53 59306 σε απάντηση της 59303

    Απ: Debug DirectX εφαρμογών με το DirectX SDK και το Visual Studio 2010

    Ευχαριστώ για την απάντηση.
    Το ότι παίρνω Buffer Overflow επειδή είναι τσεκαρισμένο το Break on memory leak το έχω καταλάβει ήδη. Δυστυχώς όμως δεν γίνεται να βρεις Direct3D memory leaks χωρίς την επιλογή αυτή. Δεν χρειάζεται να πω και το προφανές, ότι δεν θέλω καθόλου απώλεια μνήμης από την εφαρμογή μου.
    Όντως το PIX βοηθάει πολύ στο debugging, όχι όμως πάντα. Δεν γίνεται να αντικαταστήσω το Visual Studio με το PIX πλήρως. Και το να κυνηγάς memory leaks με το PIX δε θα το συνιστούσα - είναι σα να ψαρεύεις με δυναμίτη (ή με τα χέρια, κάτι τέτοιο, πάντως όχι με καλάμι - δεν είμαι καλός στις παρομοιώσεις ούτε στο ψάρεμα).
    Και αν σκέφτεται κανείς να απαντήσει ότι μπορεί να φύγει το πρόβλημα με απενεργοποίηση του Visual experience-hardware acceleration στο Visual Studio, το δοκίμασα και δεν κάνει τίποτα. Απλά τότε θα χρησιμοποιήσει Software Renderer, αλλά ούτως ή άλλως χρησιμοποιείται το περιβάλλον DirectX, και πάλι θα τα τινάξει όταν προσπαθήσει να κάνει GetAdapterDisplayMode() ή TestCoOperativeLevel() στο IDirect3DDevice9.

    Για να πω την αλήθεια περίμενα περισσότερη προσοχή από το Visual Studio Team σε αυτά τα θέματα, τουλάχιστον κανένα κρυφό registry setting που το κάνει λίγο πιο έξυπνο, αντί για τα χαζά "easter egg" τύπου settings, σαν αυτό που ενεργοποιεί τις κάθετες διακεκκομένες γραμμές στον text editor :-)

    anyway ευχαριστώ. Ίσως δοκιμάσω να το τρέξω σε Compatibility mode, αν και δεν ελπίζω πολλά.

    Panagiotis Georgiadis
    HBM Netherlands B.V.
    www.twitter.com/HimWithCurls
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems