1.2, Аноним (-), 00:58, 25/10/2016 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
порекомендуйте хороший рабочий процесс для выявления источника segmentation fault
| |
|
2.6, Alex_S (??), 03:24, 25/10/2016 [^] [^^] [^^^] [ответить]
| +6 +/– |
> порекомендуйте хороший рабочий процесс для выявления источника segmentation fault
1. build your app with max debug info ( gcc -g3 )
2. gdb
| |
2.8, Аноним (-), 07:34, 25/10/2016 [^] [^^] [^^^] [ответить]
| +14 +/– |
1. gcc -g без защиты стека.
2. Запускаете через Валгринд процесс с обработкой дочерних процессов и исключением ненужных.
3. В выводе в консоль находите первое некорректное чтение, некорректную запись или обращение к неинициализированным данным и исправляете.
4. Повторяете всё с 1-го пункта, если ошибки были найдены.
Если ошибка в строке, где не может быть ошибки, то gcc -O0 -g и проверяете без оптимизации. Зачастую ошибки, возникающие после оптимизации лечатся простым созданием промежуточных переменных вместо передачи вызовов функций или выражений в функции.
В конечном итоге нужно ещё один раз проверить код со всеми используемыми защитами стека и данных и с используемым уровнем оптимизации.
Надеюсь, эта информация кому-нибудь пригодится.
| |
|
3.9, Аноним (-), 07:36, 25/10/2016 [^] [^^] [^^^] [ответить]
| +3 +/– |
Ах да, чуть не забыл. Ещё нужен процессор с максимально большой частотой, т. к. Валгринд не поддерживает распараллеливание, т. е. все потоки и процессы вашего приложения будут эмулироваться в одном потоке с глобальными блокировками, что также не всегда даёт возможность воспроизводить ситуации гонки.
| |
3.14, Аноним (-), 16:14, 25/10/2016 [^] [^^] [^^^] [ответить]
| +/– |
Еще добавлю, что с многопоточным софтом нужно пробовать не только мемчек (дефолтный анализатор, ищет ошибки работы с памятью), но и хелгринд (анализатор для поиска датарейсов).
| |
|
2.19, fi (ok), 23:06, 25/10/2016 [^] [^^] [^^^] [ответить]
| +/– |
в 90% случаев помогает:
% gdb .../proga core
и вопрос "where"
| |
|
3.21, Аноним (-), 16:43, 26/10/2016 [^] [^^] [^^^] [ответить]
| +/– |
Я со временем почти перестал делать ошибки, от которых это помогает. Они довольно простые.
| |
|
|
1.11, Аноним (-), 08:45, 25/10/2016 [ответить] [﹢﹢﹢] [ · · · ]
| +4 +/– |
Официальный сайт троллит:
>The Valgrind tools are largely aimed at programs written in C and C++, because programs written in these languages tend to have the most bugs! | |
|
2.13, skybon (ok), 14:06, 25/10/2016 [^] [^^] [^^^] [ответить]
| –5 +/– |
Больше нет живых языков со слабой типизацией и ручным управлением памятью. Так что всё верно написано.
| |
|
3.17, Аноним (-), 19:29, 25/10/2016 [^] [^^] [^^^] [ответить]
| +1 +/– |
Типизация там не такая уж и слабая, как минимум warning мозг будут клевать прилично, а культурные люди так с -Werror собирают. А если так не собирается - ОПА, возможно ты нашел автора от софта которого стоит держаться подальше. Жаль что для других ЯП это не всегда работает.
| |
|
4.20, тоже Аноним (ok), 09:06, 26/10/2016 [^] [^^] [^^^] [ответить]
| +/– |
Например, компилятор не ругается на использование результата dynamic_cast без проверки на ноль. Что легко превращает типизацию в тыкву.
| |
4.22, derlafff (ok), 22:45, 26/10/2016 [^] [^^] [^^^] [ответить]
| +/– |
>приличные люди собирают с -Werror
Все компиляторы разные. "Приличный человек" собрал свое дерьмо с compilername-vX.Y.Z, а приличным мейнтейнерам потом этот -Werror из всей системы сборки седом выгребать.
| |
|
5.23, Michael Shigorin (ok), 23:26, 26/10/2016 [^] [^^] [^^^] [ответить]
| +/– |
>> приличные люди собирают с -Werror
> Все компиляторы разные. "Приличный человек" собрал свое дерьмо с compilername-vX.Y.Z
Так то в кавычках.
> а "приличным" мейнтейнерам потом этот -Werror из всей системы сборки седом выгребать.
У приличных (без кавычек) разработчиков его приходится отрывать ровно в одном месте -- проходил при начальном портировании альта на эльбрус.
| |
|
|
|
|
|