- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
#include <iostream>
#include <cxxabi.h>
#include <typeinfo>
int main(void)
{
uint8_t i = 63;
int status;
std::cout << i << std::endl;
char *realname = abi::__cxa_demangle(typeid(i).name(), 0, 0, &status);
std::cout << "Real type of uint8_t is: " << realname << std::endl;
delete (realname);
std::cout << (unsigned int)i << std::endl;
return 0;
}
bormand 28.10.2012 22:07 # +1
> ?
> Real type of uint8_t is: unsigned char
> 63
А что не так?
sayidandrtfm 28.10.2012 22:20 # +3
Так и представляю:
- А может запилим 1байтные инты, а?
- Да нафиг. Сами, из чаров прикастуют...
bormand 28.10.2012 22:27 # +4
Да, ступил, символ "?" действительно выглядит подозрительно для "uint8_t". Плюсую топик.
P.S. Сказалась совместимость с Си, как всегда не в лучшую сторону.
P.P.S. Кроме стримов практически нет перегрузок, которым нужно отличать unsigned char от uint8_t, поэтому проблема не так и ужасна, как кажется.
sayidandrtfm 28.10.2012 22:41 # 0
defecate-plusplus 28.10.2012 23:00 # +4
sayidandrtfm 29.10.2012 08:22 # +1
Returns:
A pointer to the start of the NUL-terminated demangled name, or NULL if the demangling fails. The caller is responsible for deallocating this memory using free.
USB 29.10.2012 08:30 # +1
bormand 29.10.2012 09:03 # 0
Вы наверное имели в виду зачем сделали мангл?
Ну как-то же надо сделать, чтобы различные с++ функции имели различные имена при экспорте. Написать туда что-то красивое в духе "void main(int argc, char **argv)" все равно не получится из-за ограничений по именованию, налагаемых компоновщиком, который переделывать нежелательно. Читать всякие TvoidFmainTintVargcTPPcharVargv вам все равно будет неприятно, поэтому они немного ужали запись, сократив стандартные типы до одной буквы...
defecate-plusplus 29.10.2012 09:17 # +1
bormand 29.10.2012 09:34 # +1
bormand 29.10.2012 09:44 # +1
defecate-plusplus 29.10.2012 10:04 # +2
стектрейсы - это в дебаге должно только работать, нет? при этом зависеть от формата этой дебажной информации?
меня в релизе спасают только ручками сделанные логи разной степени подробности, а таким передовым технологиям мы не обучены
bormand 29.10.2012 10:15 # 0
Так что придется оставить стектрейсы жавоёбам, и продолжать юзать логи разной степени подробности...
LispGovno 29.10.2012 11:21 # 0
absolut 29.10.2012 20:03 # +3
LispGovno 29.10.2012 11:23 # 0
В релизе конечно. А так программа упала, прислала инфу о падении на сервер вместе с стектрейсом и я её поправил. Пользователь обновил программу с того же сервера.
defecate-plusplus 29.10.2012 11:28 # +3
LispGovno 29.10.2012 11:45 # +2
http://article.gmane.org/gmane.comp.lib.boost.devel/209982
defecate-plusplus 29.10.2012 11:48 # +3
defecate-plusplus 29.10.2012 12:02 # +2
в основной ветке нет его, да и даже в списке реджекнутых не вижу
http://www.boost.org/community/review_schedule.html
LispGovno 29.10.2012 12:06 # 0
LispGovno 29.10.2012 12:27 # 0
defecate-plusplus 29.10.2012 12:31 # 0
LispGovno 29.10.2012 12:32 # −1
bormand 29.10.2012 12:20 # +1
bormand 29.10.2012 12:18 # +1
http://ideone.com/n6LLqC
Если скомпилить с -rdynamic, выдает довольно красивый трейс:
P.S. Это говнишко достойно отдельного треда?
LispGovno 29.10.2012 12:23 # +1
Привет хедергуарду #pragma once и я сильно не уверен, но возможно и ODR
bormand 29.10.2012 12:39 # +1
С неймспейсом С просто грязный хак, потому что хотелось назвать класс backtrace. Я знаю, что это очень нехороший поступок, и раскаиваюсь в этом.
LispGovno 29.10.2012 12:42 # +1
back_trace
или
bormand::back_trace
bormand 29.10.2012 12:46 # +3
LispGovno 29.10.2012 16:26 # +1
bormand 29.10.2012 12:45 # +2
* Пофиксен баг с выводом экцепшенов без бектрейса
* Причесаны хидеры
P.S. Лишний раз убеждаюсь, что второпях код писать вредно.
sayidandrtfm 29.10.2012 11:32 # +4
http://stackoverflow.com/questions/77005/how-to-generate-a-stacktrace-when-my-gcc-c-app-crashes