C++, crashpad, pdb. Пометить код в pdb файле?
От: Aleksey82  
Дата: 16.01.20 22:31
Оценка:
Вопрос чайника.

Есть огромный проект на С++. Сейчас его правят, внося в код какие-то изменения, от пары строк в функции до новых классов. На проекте используется crashpad. Если прога падает, сторонний процесс с помощью крашпада создает .dmp файл и отправляет его на сервер (omaha). На сервере в UI при наличии pdb файлов можно поглядеть callstack.

Вопрос: есть ли какой-то способ пометить исходный код так чтобы кто-то глядя на дамп или колл-стек мог сразу сказать -- это наши изменения или это старый исходный код?

Ну и вообще, есть ли какие-то способы ускорить/автоматизировать этот процесс если дамп попал на машину к девелоперу? Я краем глаза видел какие-то упоминания что pdb файлы можно связать с гитом. Может еще куда-то посмотреть?
Re: C++, crashpad, pdb. Пометить код в pdb файле?
От: K13 http://akvis.com
Дата: 17.01.20 07:08
Оценка:
Здравствуйте, Aleksey82, Вы писали:

A>Вопрос: есть ли какой-то способ пометить исходный код так чтобы кто-то глядя на дамп или колл-стек мог сразу сказать -- это наши изменения или это старый исходный код?


В разных сборках полный номер версии файла разный (надеюсь)?
Тогда получить соответствие "номер версии -- ревизия исходного кода" проблем не вижу.
Для svn можно вообще номер ревизии включать в номер версии, для других прикрутить на билд-сервере обновление таблички и потом в ней смотреть.
Re[2]: C++, crashpad, pdb. Пометить код в pdb файле?
От: Aleksey82  
Дата: 17.01.20 08:54
Оценка:
K13>В разных сборках полный номер версии файла разный (надеюсь)?
K13>Тогда получить соответствие "номер версии -- ревизия исходного кода" проблем не вижу.
K13>Для svn можно вообще номер ревизии включать в номер версии, для других прикрутить на билд-сервере обновление таблички и потом в ней смотреть.

А можно где-то про это подробнее почитать? Может какая статья есть как народ делает?
Re: C++, crashpad, pdb. Пометить код в pdb файле?
От: EreTIk EreTIk's Box
Дата: 17.01.20 09:31
Оценка:
Здравствуйте, Aleksey82, Вы писали:

A>Ну и вообще, есть ли какие-то способы ускорить/автоматизировать этот процесс если дамп попал на машину к девелоперу? Я краем глаза видел какие-то упоминания что pdb файлы можно связать с гитом. Может еще куда-то посмотреть?


За crashpad сказать не могу (если он тут вообще имеет отношение к разбору дампов), но что бы в pdb включать привязку к конкретной ревизии репозитория используется Source Server. WinDbg после The Ssindex.cmd Script качает нужную ревизию сорца для отображения исходного кода.
Но я работал с ним только совместно с SVN и TFS, а вот можно ли туда GIT засунуть.... наверное можно, но либо надо искать сторонние скрипты или велосипедить.
Re[2]: C++, crashpad, pdb. Пометить код в pdb файле?
От: Aleksey82  
Дата: 17.01.20 11:34
Оценка:
ETI>За crashpad сказать не могу (если он тут вообще имеет отношение к разбору дампов), но что бы в pdb включать привязку к конкретной ревизии репозитория

Но это все дает только версию файла, в которой может можно сделать blame, т.е. это надо делать на девелоперской машине. А возможны ли еще какие-то варианты? Чтобы прямо в коллстек какие-то символы вставлять?
Re[3]: C++, crashpad, pdb. Пометить код в pdb файле?
От: EreTIk EreTIk's Box
Дата: 17.01.20 12:02
Оценка:
Здравствуйте, Aleksey82, Вы писали:

A>Но это все дает только версию файла, в которой может можно сделать blame, т.е. это надо делать на девелоперской машине. А возможны ли еще какие-то варианты? Чтобы прямо в коллстек какие-то символы вставлять?


Не знаю как именно UI отображает падение: что именно там доступно? Из того, что приходит в голову — путь к исходному файлу храниться в pdb. Можно перед сборкой сорцы checkout'ить в директорию, которая будет включить в себя нужные метки (ревизию GIT'а, дату/время сборки). Соответственно, если в UI есть пути к сорцам, в стеке вызовов будет видна ревизия репозитория.
Отредактировано 17.01.2020 12:09 EreTIk . Предыдущая версия .
Re[4]: C++, crashpad, pdb. Пометить код в pdb файле?
От: Aleksey82  
Дата: 17.01.20 12:22
Оценка:
ETI>Не знаю как именно UI отображает падение: что именно там доступно? Из того, что приходит в голову — путь к исходному файлу храниться в pdb. Можно перед сборкой сорцы checkout'ить в директорию, которая будет включить в себя нужные метки (ревизию GIT'а, дату/время сборки). Соответственно, если в UI есть пути к сорцам, в стеке вызовов будет видна ревизия репозитория.

Я скорее имею в виду кусок кода, а не файл.

На сервере виден коллстек момента падения, так, как если бы дамп открывали студией. По сути обычный коллстек как при отладке. Интересно, а можно ли туда вставить какие-то метки. Типа вот эта функция помечена как "наша", а вот та — как не наша.
Re[5]: C++, crashpad, pdb. Пометить код в pdb файле?
От: EreTIk EreTIk's Box
Дата: 17.01.20 12:31
Оценка:
Здравствуйте, Aleksey82, Вы писали:

A>На сервере виден коллстек момента падения, так, как если бы дамп открывали студией. По сути обычный коллстек как при отладке.


Студия знает привязку кода к исходникам.

A>Интересно, а можно ли туда вставить какие-то метки. Типа вот эта функция помечена как "наша", а вот та — как не наша.


Кто будет вставлять (программист, build-сервер, какой-то аналитик)? Когда (до сборки, после сборки, в момент формирования дампа)? Каким образом (править сорцы, дописывать pdb, писать в независимую БД)?

Может подойдут разные пространства имен (с++ namespaces) для "наших" и "не наших" функций?
Отредактировано 17.01.2020 12:32 EreTIk . Предыдущая версия .
Re[6]: C++, crashpad, pdb. Пометить код в pdb файле?
От: Aleksey82  
Дата: 17.01.20 12:44
Оценка:
ETI>Кто будет вставлять (программист, build-сервер, какой-то аналитик)? Когда (до сборки, после сборки, в момент формирования дампа)? Каким образом (править сорцы, дописывать pdb, писать в независимую БД)?

Программист. А когда чего и как, я и хотел послушать про варианты, если они вообще есть

ETI>Может подойдут разные пространства имен (с++ namespaces) для "наших" и "не наших" функций?


У меня тоже была такая идея. Или там, в отдельные dll пихать "наш" код (как извращение). Но есть еще ситуации когда правили пять строк в большой существующей функции, и как отличить "наши" строки от "не наших". И есть еще ситуации когда крашнуло в "не нашей" функции, но из-за того что парой функций выше мы вставили какой-то свой костыль который все ломает. Совсем общего решения, видимо, нет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.