J'écris souvent du code qui rend les images en écrivant des pixels directement dans des tampons et j'ai souvent du mal à avoir une bonne vue d'ensemble de ce qui se passe réellement. La fenêtre de mémoire dans le débogueur de Visual Studio est un peu une aide, mais j'aimerais vraiment voir les images graphiquement. Donc, ma question est, est-ce que quelqu'un sait d'une extension de débogage qui peut lire un morceau de mémoire comme une image dans un format de pixel spécifié et l'afficher graphiquement?Déboguer le rendu d'image dans Visual C++, des compléments utiles?
Répondre
Une telle chose existe:
Un utilitaire pour le débogage simple, de style printf d'images dans les applications Win32 C/C.
http://billbaxter.com/projects/imdebug/
Mon collègue de travail raves à ce sujet.
--Chris
J'ai mis au rebut ma vieille réponse car elle n'était pas pertinente. Le nouveau sur OpenCV également utilisé (puisque j'essaie d'afficher une image OpenCV) mais il peut être adapté à n'importe quel framework.
Le noyau de codeest là où il faut une adresse de mémoire address
, et le nombre d'octets à lire à travers numrows
, numcols
et byte_size
et lit les octets dans un tampon. Je suis sûr que vous pouvez adapter partie du code pour vos propres besoins.
#include "stdafx.h"
#include <windows.h>
#include <cv.h>
#include <highgui.h>
#include <iostream>
using namespace std;
using namespace cv;
void imshow_debug(const LPCVOID address, const int numrows, const int numcols, const int type, const int byte_size, const int step, const string windows_title)
{
// Initialize
unsigned long PID;
SIZE_T read_bytes = 0;
// Allocate space for the image
const int bytes_to_read = numrows*numcols*byte_size;
uchar *image_data = new uchar[bytes_to_read];
Mat Image(numrows,numcols,type,image_data,step);
// Get the handle and PID
HWND handle = FindWindowA(0, windows_title.c_str());
if (!FindWindowA(0, windows_title.c_str()))
{
printf("Window %s not found!", windows_title);
exit(0);
}
GetWindowThreadProcessId(handle, &PID); /* Get windows PID from a window handle */
HANDLE WindowsProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, false, PID);
// Read the image
ReadProcessMemory(WindowsProcessHandle,address,image_data,bytes_to_read,&read_bytes);
if(bytes_to_read != read_bytes)
{
cout<<"Could not read entire image"<<endl;
exit(0);
}
// Display the image
namedWindow("Image");
imshow("Image",Image);
waitKey();
// Clean up
CloseHandle(WindowsProcessHandle);
delete[]image_data;
}
int main(int argc, char* argv[])
{
imshow_debug((LPVOID)0x03af0370,300,300,CV_64F,sizeof(double),2400,"C:\\Documents and Settings\\jacobm\\My Documents\\Visual Studio 2005\\Projects\\Head\\debug\\SSR_VideoComp.exe");
return 0;
}
Je pensais avoir été assez clair pour que mon problème n'affiche pas les images à un moment donné, mon problème est que je veux afficher les images pendant que je parcours le code dans le débogueur et que je veux voir comment se déplace mon pointeur d'écriture autour. Je suis après une extension du débogueur qui montre ce que fait mon code quand je le traverse. – nielsm
Je suis désolé pour cela et j'ai * finalement * commencé à l'implémenter :) – Jacob
Pour la visualisation des images OpenCV, voir https://sourceforge.net/projects/nativeviewer/ – Mikhail
- créer une classe contenant le tampon + métadonnées (largeur, hauteur, foulée, PixelFormat).
- Ajoutez des méthodes ToStream() et FromStream() à votre classe pour l'image (de) sérialisation (tampon et métadonnées).
- Ajoutez un ToWpfBitmapSource() à votre classe.
- Créez un visualiseur de débogage qui désérialise votre image du flux, convertit en BitmapSource de WPF, placé dans un contrôle Image, dans un hôte WPF Winforms.
Cet exemple vous aidera: http://www.codeproject.com/KB/WPF/WPF_Glimps.aspx
La classe peut être ajouté en C++ CLI dans une DLL séparée.
Un de mes collègues a écrit cet article CodeProject pour écrire visualiseurs Debugger
http://www.codeproject.com/KB/showcase/BuildDebuggerVisualizer.aspx
Il utilise notre produit, une boîte à outils d'imagerie .NET, mais il pourrait facilement être adapté pour utiliser des classes d'image .NET à la place.
Qu'est-ce que vous demandez est pas naturellement achieveable dans C++ natif. Toute la technologie de visualisation à l'intérieur du débogueur visuel est organisée autour du CLR, d'où C# ou C++/CLI.
La seule chose qui peut aider dans la terre natale est le mécanisme expression evaluator addin.Bien sûr, il est conçu pour renvoyer une chaîne et s'en aller, mais c'est du code, donc vous pouvez en théorie exécuter n'importe quel code, y compris afficher une fenêtre et afficher les données qui vous intéressent (après l'avoir lu depuis le débogué). Cependant, il est un peu décevant de voir ces fonctionnalités manquantes du côté natif.
Je développe un complément open source, Visual Image Assist, pour VC6/7/8/9 utilisé pour afficher/modifier une image. C'est peut-être aussi ce que tu veux.
Y a-t-il des mises à jour sur le projet? Il n'est même pas clair comment construire la dernière version. – Mikhail
Je ne l'avais pas développé maintenant. Je l'ai transféré à mon collègue. Si lui et moi avons le temps, nous l'améliorerons. –
- 1. Existe-t-il de bons compléments dans Visual C# 2008?
- 2. TDD dans les compléments Visual Studio 2008
- 3. Quels outils (gratuits ou non) trouvez-vous utiles pour développer et déboguer C#/C++?
- 4. Déboguer Threadpool en C#
- 5. Comment déboguer des tests unitaires mbunit/Gallio dans Visual Studio
- 6. Suivi des 'liens utiles'
- 7. Comment déboguer * Invoke() dans Visual Studio 2008
- 8. Visual Studio 2008 ne serait pas déboguer
- 9. Déboguer l'assembly chargé dynamiquement dans Visual Studio .NET
- 10. Déboguer le formulaire InfoPath
- 11. Comment déboguer des projets Visual Studio à l'aide de VMware?
- 12. SVN - Récupération des informations utiles
- 13. Comment déboguer des services Web dans Silverlight
- 14. Déboguer C++ lib avec eclipse
- 15. WinDbg ne montre pas des informations utiles
- 16. Créer des programmes d'installation pour les compléments à l'aide de Visual Studio?
- 17. Comment déboguer javascript dans firefox via Visual Studio 2008?
- 18. Quel est le but des contrôles utilisateur dans Visual C#?
- 19. Comment puis-je déboguer un fichier EXE MinGW avec le débogueur Microsoft Visual C++?
- 20. comment déboguer le fichier ashx dans VSTS?
- 21. Impossible de déboguer le SharePoint
- 22. Comment obtenir des données utiles de Shark?
- 23. Bonne façon de déboguer les erreurs Visual Studio Designer
- 24. Déboguer Javascript dans ASP.NET
- 25. SQL SELECT WHERE des idées utiles dérangement
- 26. Comment Google Chrome propose-t-il des compléments d'URL?
- 27. fichier de rendu avec le type MIME dans des rails
- 28. Comment accélérer le rendu des cartes dans Flex?
- 29. Déboguer le flash avec le mode gdb dans Emacs
- 30. Fonctionnalités moins connues mais utiles dans Eclipse
Je m'intéresse exactement à la même tâche. Y a-t-il des progrès sur le problème? Vous avez accepté la réponse avec un lien vers imdebug, mais cela nécessite des modifications du code source et contredit votre propre commentaire: http://stackoverflow.com/questions/1549129/debugging-image-rendering-in-visual-c-any-helpful -add-ins # comment1425286_1549543, n'est-ce pas? – Mikhail