Зачем в Release по умолчанию включены dbg-символы?
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.10.10 18:57
Оценка:
Всем привет.

Наткнулся на то, что немерловые проекты скомпилированные в релизе и запущенные без отладчика работают значительно медленнее нежели аналогичные приложения написанные на C#.

Просмотр IL-а не выявил существенных различий. Тогда я начал анализировать атрибуты сборки и обнаружил в немерловых сборках следующее:
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.Default)]


Этот атрибут дописывается в сборку если в свойствах проекта "Debug symbols" установлено в true.

Собственно вопрос: почему по умолчанию у нас "Debug symbols" установлено в true?

Надо это дело отключить. А том долго будем объяснять почему немерл тормоз .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Зачем в Release по умолчанию включены dbg-символы?
От: hardcase Пират http://nemerle.org
Дата: 21.10.10 19:03
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Просмотр IL-а не выявил существенных различий. Тогда я начал анализировать атрибуты сборки и обнаружил в немерловых сборках следующее:

VD>
VD>[assembly: Debuggable(DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.Default)]
VD>




Возможно виной тому эта настройка устанавливаемая при компиляции в релизе:
<DebugType>pdbonly</DebugType>
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: Зачем в Release по умолчанию включены dbg-символы?
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.10.10 19:26
Оценка:
Здравствуйте, hardcase, Вы писали:

H>


H>Возможно виной тому эта настройка устанавливаемая при компиляции в релизе:

H>
H><DebugType>pdbonly</DebugType>
H>


Ага. Наверно это она.
Из-за этого тест отсюда
Автор: VladD2
Дата: 21.10.10
выполнялся более чем в двое медленнее.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Зачем в Release по умолчанию включены dbg-символы?
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.10.10 19:37
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Возможно виной тому эта настройка устанавливаемая при компиляции в релизе:

H>
H><DebugType>pdbonly</DebugType>
H>


Это у нас в шаблонах такое?

Надо бы выкинуть.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Зачем в Release по умолчанию включены dbg-символы?
От: Блудов Павел Россия  
Дата: 22.10.10 02:39
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>
VD>[assembly: Debuggable(DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.Default)]
VD>


VD>Этот атрибут дописывается в сборку если в свойствах проекта "Debug symbols" установлено в true.


На самом деле проблема конечно в том, что CompilationOptions.EmitDebug имеет тип bool.
Т.е. либо on, либо off. У компилятора c# параметр debug имеет три состояния: off/full/pdbOnly.

Если кто-нибудь скажет, зачем нужно собирать оптимизированную версию, но с отладочной информацией, я возьмусь поменять bool на enum {off, full, pdbOnly}. Будет, скажем, по умолчанию off, "-debug" даст full, "-debug:pdbonly" включит генерацию pdb, но не выключит оптимизацию.
debug
Re[3]: Зачем в Release по умолчанию включены dbg-символы?
От: hardcase Пират http://nemerle.org
Дата: 22.10.10 05:15
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, hardcase, Вы писали:


H>>Возможно виной тому эта настройка устанавливаемая при компиляции в релизе:

H>>
H>><DebugType>pdbonly</DebugType>
H>>


VD>Это у нас в шаблонах такое?


Нет. Это в проекте компилятора.
Но как я вчера посмотрел, pdbonly не приводит к попаданию атрибута Debuggable в сборку.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: Зачем в Release по умолчанию включены dbg-символы?
От: para  
Дата: 22.10.10 17:01
Оценка: +1
Здравствуйте, Блудов Павел, Вы писали:

БП>Если кто-нибудь скажет, зачем нужно собирать оптимизированную версию, но с отладочной информацией, я возьмусь поменять bool на enum {off, full, pdbOnly}. Будет, скажем, по умолчанию off, "-debug" даст full, "-debug:pdbonly" включит генерацию pdb, но не выключит оптимизацию.


Если рядом со сборкой лежит pdb-шка, то Exception.StackTrace содержит локейшены мест вызовов методов.
Re[2]: Зачем в Release по умолчанию включены dbg-символы?
От: _nn_ www.nemerleweb.com
Дата: 08.11.10 09:53
Оценка:
Здравствуйте, Блудов Павел, Вы писали:

БП>На самом деле проблема конечно в том, что CompilationOptions.EmitDebug имеет тип bool.

БП>Т.е. либо on, либо off. У компилятора c# параметр debug имеет три состояния: off/full/pdbOnly.

А когда в Nemerle будет работать как в C# ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.