Сейчас на форуме: tyns777 (+4 невидимых) |
eXeL@B —› Программирование —› Неуловимый баг VS2008, IDA |
Посл.ответ | Сообщение |
|
Создано: 16 августа 2010 23:23 · Личное сообщение · #1 Понимаю, что немного не по теме форума, но столкнулся с интересным багом. программа в Visual studio 2008, C++/MFC, использую zlib.dll. под VS в режимах Release/Debug работает отлично, при самостоятельном запуске работает 1 раз из 5. Т.е. 4 раза сваливается с обращением в 0 из ntdll.dll, 1 раз работает норм. Гонял под IDA и с запуском из IDA, и через Attach to process - багов нет... На наличие неинициализированных переменных проверял, все ОК. Кто-нить может дать наметку, что за херь такая? |
|
Создано: 16 августа 2010 23:24 · Личное сообщение · #2 |
|
Создано: 16 августа 2010 23:37 · Поправил: DenCoder · Личное сообщение · #3 |
|
Создано: 16 августа 2010 23:47 · Личное сообщение · #4 |
|
Создано: 16 августа 2010 23:49 · Поправил: DenCoder · Личное сообщение · #5 |
|
Создано: 16 августа 2010 23:53 · Личное сообщение · #6 |
|
Создано: 17 августа 2010 01:13 · Личное сообщение · #7 |
|
Создано: 17 августа 2010 03:03 · Личное сообщение · #8 |
|
Создано: 17 августа 2010 11:23 · Личное сообщение · #9 coolangel +10 Ошибка наверняка при работе с памятью. Это наиболее часто встречающаяся ошибка при работе с Си/Си++ кодом. А вот какая именно, надо смотреть. Лично я чаще встречал выход за диапазон массива (в смысле не только у себя). Советую выставить вот эти вещи (в режиме Debug, разумеется): Smaller Type checks: Yes (/RTCc) Basic runtime checks: Both (/RTC1, equiv. to /RTCsu) Buffer Security Check: Yes |
|
Создано: 17 августа 2010 14:01 · Поправил: DenCoder · Личное сообщение · #10 Советы по программированию от DenCoder'а: 1) Чтоб было меньше ошибок, связанных с памятью, new/delete (malloc/free; HeapAlloc; HeapFree; ....) нужно сразу пиcать как скобки и между ними уже писать код. Подобные ошибки при таком подходе снижаются сразу на порядок, а то и на 2. 2) Если предполагается изменение кода в функции, то рекомендуется после new ставить {, перед delete ставить }. Это дает такие возможности как collapse/expand, и Ctrl + [ для быстрого перехода между фрагментами кода. 3) В многопоточных программах идеально если память выделяется и освобождается одним и тем же потоком. Но в любом случае нужно обеспечить хорошую синхронизацию, при этом никогда не полагаться на какой-то график выполнения потоков. Их очередность выполнения случайна. 4) Для отлова ошибок обращения к памяти рекомендую перед каждым обращением к функции, среди аргументов которой любые указатели, добавить if(IsBadReadPtr()) / / if(IsBadWritePtr()). Это позволит сузить круг подозрений. 5) Также в многопоточных программах не рекомендуется передавать в поток указатели на локальные переменные какой-либо функции других потоков, если поведение потока-владельца стека трудно предсказуемо. ----- IZ.RU |
|
Создано: 17 августа 2010 15:07 · Поправил: VodoleY · Личное сообщение · #11 DoctorCrash может не совсем в тему. глядиш поможет. както из из ИДЫ в Делфи копировал куски кода. ИДА вместо PUSHAD отдизасемблила PUSHA, прога моя падала проработав разное количество времени (стэк начинал налазить на область данных). Сидел рученками контролил стэк. Метод половинного деления кода вам в помощь. Ну и удачи. З.Ы. еще фигня. я собственно Делфист. Была хрень когда под Делфей прога раб. стэйб а сама крешица. Тоже было дело в том что делфя сама освобождает обьекты в процессе если ты забыл им сделать Фрии/Дестрой. ----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... |
|
Создано: 17 августа 2010 16:51 · Личное сообщение · #12 |
|
Создано: 18 августа 2010 07:18 · Личное сообщение · #13 |
|
Создано: 18 августа 2010 07:21 · Поправил: VodoleY · Личное сообщение · #14 int тут собственно я не на что не ругаюсь, суть высказывания была в том, что присутствует человеческий фактор и 1 буква в опечатке может приводить к многим часам дебага.Даже машинисткам при наборе отводица 2процента на опечкатки. А глюки могут быть коварны dermatolog а я не говорил что делфи ее испльзовало, я переносил в Делфи кусок кода из ИДЫ ----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... |
|
Создано: 09 сентября 2010 22:49 · Личное сообщение · #15 |
|
Создано: 10 сентября 2010 08:21 · Личное сообщение · #16 |
eXeL@B —› Программирование —› Неуловимый баг VS2008, IDA |
Эта тема закрыта. Ответы больше не принимаются. |