3 votes

taille de la dll de débogage par rapport à celle de publication

Pourquoi, en cpp, une dll en mode débogage est X10 plus grande que la version officielle alors qu'en .Net, elles ont presque la même taille ?

3voto

AnthonyLambert Points 4884

Pour déboguer un programme C++, de nombreuses informations supplémentaires doivent être conservées dans la DLL afin que le débogueur puisse connaître le code au moment de l'exécution. Le C++ n'a pas d'exigence d'exécution pour pouvoir inspecter le code, contrairement au C# qui permet une inspection étendue à l'exécution, également connue sous le nom de réflexion. Ces informations sont présentes en C#, que l'on utilise le mode debug ou le mode release.

De plus, le C++ est généralement compilé directement en code machine en mode release ; l'objectif du compilateur est d'optimiser le code autant que possible, c'est-à-dire de supprimer toute information et tout code superflus. En C#, le compilateur compile vers un pseudo-code qui est compilé juste à temps selon les besoins. Ce code conserve une grande partie de ce qui est nécessaire pour le débogage, que vous construisiez une version ou un débogage. A tel point qu'il est possible d'écrire un dé-compilateur pour vous rendre le code à partir d'un assemblage d'exécution.

1voto

cedrou Points 1709

Peut-être parce que dans .Net, c'est le moteur d'exécution qui gère toutes les vérifications de débogage, alors que dans CPP, toutes les vérifications sont compilées dans la DLL.

1voto

Jan Bannister Points 1879

Les DLL .Net contiennent des métadonnées qui prennent en charge la réflexion au moment de l'exécution, la sécurité des types et la sécurité d'accès au code. Les seules choses qui se trouvent dans les PDB sont les noms des variables locales et les numéros de ligne.

Alors qu'en C++, des métadonnées supplémentaires et parfois des no-ops doivent être injectés pour faciliter le débogage.

0voto

demoncodemonkey Points 4812

Vous voulez dire C# et non .NET. Cela dépend également de votre projet.

J'ai une DLL C++/CLI qui fait 54K en version release et 94K en debug,
et une autre qui fait 88KB en release et 124KB en debug.

Mon EXE C++/CLI qui inclut MFC fait 471KB en release et 4446KB en debug !

Et puis ma DLL C# fait 135 Ko en version déboguée et en version publiée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X