LINUX.ORG.RU

3
Всего сообщений: 57

Отладка и просмотр объектов в памяти (python)

Подскажите, есть ли какая-нибудь питонская либа, которая позволяет просматривать объекты в памяти в удобном формате?

Я имею в виду например: начинаем с какого-нибудь объекта - отображается его содержимое. Потом подводишь мышку к какому-нибудь полю этого объекта, которое ссылается на другой объект, и рядом появляется окошко, в котором отображается содержимое этого другого объекта. Далее в новом окошке можно сделать то же самое. И так далее. А когда убираешь мышку с окна - оно пропадает.

Я помню такое было в MSVC2008. Это было очень удобно.

Если такое есть для jupyter-notebook-а - будет вообще божественно.

 ,

FeelUs ()

Хочу освоить gdb, но мануальники читать лень.

А значит самое разумное попробовать получить мастерклас от тех, кто умеет.

Что есть, Debian Buster с ядром 5.2, процессор amd FX8350, Radeon vii.

В принципе чтобы польза была обоюдной можно меня учить на примере отладки iommu, который опять поломали из-за чего его пришлось отключить в биосе.

Но могу поставить и выполнить задания с gdb и для других программ изрепозитория Debian Buster.
Главное чтобы задания были простые и исчерпывающие, начиная с apt install …

П.С. Шутников с заданиями похожими на патч Бармина пошлю подальше сразу как пойму.

 , , , ,

torvn77 ()

Allwinner V40/R40/T3 + Android

День добрый, давно занимаюсь электроникой и встраиваемыми системами (на STM32), проектирую схемы, развожу платы, пишу код. Немного программирую на андроиде, пару раз запускал всякие распберри на линуксе. Давно уже хочу сделать свой одноплатник. На работе рассматривали возможность создания кастомного одноплатника с андроидом на борту, который будет использоваться в устройствах для автомобилей и спец техники. Соответственно, выбор пал на те CPU, которые могут в -40..+85 'C и другие требования. Выбрал я Allwinner T3, но, чтоб двигаться поступательно к неизвестному, решил начать с более распространенных процессоров типа A64.

Полной документации на allwinnerы не нашел, зато в том, что нашел, обнаружил, что там pdf объединяет сразу 3 проца (V40, R40 и T3). Структурные схемы их на офф. сайте совпадают. Соответственно, вопрос к знатокам: это действительно настолько одинаковые процы, что можно собрать андроид под V40 и он взлетит на Т3? Если так, то для начала можно купить борду на V40, благо их полно, а потом уже перелезть на Т3 с алибабы. Можно ли будет как то отлаживать сам андроид, залитый в мой одноплатник? Ставить там брейкпоинты, выполнять инструкции пошагово. Заранее спасибо.

 , , ,

itxs ()

Отладочная печать

Имеем файл с исходным кодом модуля ядра. Необходимо добавить в каждую функцию printk("%s\n", __func__);. Как это реализовать с помощью sed? Какие есть более адекватные способы вывода имен функций в порядке их вызова во время работы модуля?

 , ,

Deleted ()

Почему-то не вычисляется выражение в QML (с картинками)

Делаю я тип MetallFramePlanarButton.qml для отрисовки кнопки. Делается на базе типа Item. Предполагается, что кнопка квадратная. В нем сделано свойство scaleFactor (используемое для масштабирования внутренних элементов):

Item {
    id: root
    
    ...

    property double scaleFactor: buttonFrame.implicitWidth===0 ? 0 : root.width/buttonFrame.implicitWidth

    // Размер кнопки задается шириной. Кнопка квадратная
    height: root.width

    onWidthChanged: {
        setButtonFrameSize();
    }

    onHeightChanged: {
        setButtonFrameSize();
    }

    // * Установка размера картинки рамки *
    function setButtonFrameSize() {
        // Напрямую устанавливать значения нельзя
        var w=buttonFrame.implicitWidth*root.scaleFactor;
        var h=buttonFrame.implicitHeight*root.scaleFactor;

        buttonFrame.width=w;
        buttonFrame.height=h;
    }

    ... 

    // Металлическая рамка
    // Относительно нее считаются размеры и смещения всех остальных элементов в кнопке
    Image {
        id: buttonFrame

        source: "qrc:/resource/pic/button/metallFramePlanarButton/buttonCase.png"
        fillMode: Image.PreserveAspectFit
    }

}

Используется эта кнопка с указанием ширины:
MetallFramePlanarButton {
        id: exitToMainMenuButton

        iconSource1: "qrc:/resource/pic/mapTools/buttons/iconMenu.png"

        width: root.buttonSize
    }

Так вот, ставлю я брекпоинт в функцию setButtonFrameSize(), чтобы посмотреть как вычисляются w и h. И вижу, что они равны нулю:

http://i.piccy.info/i9/2094984c903235facac02d77768cd2b3/1543847738/275438/128...

Почему же, например, w равно нулю? Потому что:

buttonFrame.implicitWidth = 169
root.scaleFactor = 0

Умножение на 0 дает 0. Теперь вопрос, а почему root.scaleFactor нуливой? Дублирую выражение, которым это свойство вычисляется, чтобы оно вычислилось в отладчике (его видно справа вверху, нижняя строчка:
buttonFrame.implicitWidth===0 ? 0 : root.width/buttonFrame.implicitWidth

И это выражение дает значение 0.53. Это совсем не 0!

http://i.piccy.info/i9/1bf478f285b85c332fa833252893bd8b/1543853567/207581/128...

То есть, если вычислить выражение в отладчике, оно дает ненулевое значение. То же самое выражение, присвоенное свойству scaleFactor, имеет значение 0.

Почему так?

 , , ,

Xintrea ()

DMARC зарубил письмо, прошедшее и через SPF, и через DKIM; почему?

Есть рассылка, которая работала ОК до того момента, как в DNS-записи подключили DMARC (нужно было для другой службы рассылки с того же домена):

$ dig +short -t TXT _dmarc.example.com
"v=DMARC1; p=quarantine; rua=mailto:admin@example.com"

В частности, попавшее в SPAM-папку письмо имеет вот такой заголовок:

Authentication-Results: mx.google.com;
       dkim=pass header.i=@sender.com header.s=sign header.b=qwcsZ7KF;
       spf=pass (google.com: domain of postmaster@sender.com designates xx.xxx.xx.xx as permitted sender) smtp.mailfrom=postmaster@sender.com;
       dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=QUARANTINE) header.from=example.com

где sender.com — домен службы рассылки, example.com — домен того, кто заказывает музыку, xx.xxx.xx.xx — сервер, с которого рассылка.

Вопрос: почему DMARC зарезал рассылку? Ведь если SPF PASS и DKIM PASS, то и DMARC должен быть по идее PASS, логично? По крайней мере статья на Википедии об DMARC говорит в частности о том, что

DMARC устанавливает стандарт для идентификации электронных сообщений принимающими узлами с использованием механизмов Sender Policy Framework (структуры политики отправителя, SPF) и DomainKeys Identified Mail (почты, идентифицируемой при помощи доменных ключей, DKIM).

Я в недоумении. Пожалуйста, просветите.

 ,

Infra_HDC ()

Установить зависимости для debuginfo

Добрый день! Пытаюсь понять почему падает апач на centos7. Установил debuginfo, при попытке посмотреть дамп выдает:

Missing separate debuginfos, use: debuginfo-install ImageMagick-last-libs-6.9.3.3-1.el7.remi.x86_64 ...

Далее пытаюсь установить зависимости, но выдает:

Could not find debuginfo for main pkg: ImageMagick-last-libs-6.9.3.3-1.el7.remi.x86_64

Добавил epel и remi, с надеждой, что нужные пакеты будут там. Но это не помогло.

Нашел, что такой пакет есть в репе https://rpms.southbridge.ru/rhel7/stable/x86_64/ Добавил репу, но это не помогло.

Куда рыть дальше? До этого ни разу не сталкивался с debuginfo.

Спасибо за ответы.

 ,

delimer ()

Получить имена и значения параметров методов в С++

Привет всем. Такой вопрос: предположим у меня есть бинарный файл, собранный g++, и прилагающийся к нему файл core dump. Могу ли я узнать символьные значения параметров методов в месте падения программы, например, экземпляр какого класса передан в конструктор или другой метод класса-исключения?

Всем спасибо.

 ,

LongLiveUbuntu ()

Как отлаживать софт?

Нужно самому выявить причину бага с софте, так как на лоре мне никто так не ответил толком на различные вопросы. Предполагается что буду исследовать всевозможные стеки вызовов относительно визуальных маркеров (например, когда игра выводит в терминал информацию о ошибке, в этот момент я отлавливаю стек, где будут отображены все вызываемые функции и переданные им аргументы).

Как такое правильно делать и правильно я рассуждаю? Расскажите о опыте отладки и устранении выявленных багов. Приветствуется опыт отладки полузакрытого (debug-информация частично присутствует в бинарниках) и полностью закрытого софта.

 ,

xDShot ()

Как пользоваться отладчиком KDbg? (Что-то я все забыл)

Давно я не отлаживал сторонние программы, а тут пришлось отладить один C++ проект. По старой памяти установил kdbg (встала версия 2.5.1-1), но она оказалась нерабочая (Debian 9 Stable 64 bit). При выборе отлаживаемого бинарника выдает:

Could not start the debugger process. Please shut down KDbg and resolve the problem.
Не удалось запустить процесс отладчика. Пожалуйста, закройте KDbg и устраните проблему.

В интернетах решения этой проблемы не нашел.

Полез тогда на официальную страницу: http://www.kdbg.org/ . Там написано, что стабильная версия 3.0.0. Хорошо, снес системный kdbg, установил kdbg 3.0.0 из исходников. И он даже работает.

Ну как работает... Запускает из-под себя бинарник, в консоль сыплются сообщения бинарника. Можно приостановить бинарник и пощелкать по шагам... Видны какие-то локальные переменные, они меняются. Но проблема в том...

Проблема в том, что я забыл как в KDbg открывать бинарник вместе с его исходником. Перед запуском отладки я вручную открыл файл с функцией main(), поставил внутре нее брекпоинт, а он не срабатывает. Да и когда приостанавливаетшь бинарник, исходного кода не видно.

Подробности:

- все единицы трансляции собираются с флагом -g
- все файлы исходников лежат в том же каталоге, куда кладется скомпилированный бинарник
- компиляция идет через утилиту make, проект не привязан ни к какой среде разработки
- запуск бинарника на отладку происходит в том же каталоге где и лежат исходники (задаю каталог в Исполнение-Аргументы-Рабочая директория)

 , , , ,

Xintrea ()

Макроопределения и отладочный вывод в C++. Когда очень хочется

Страуструп в своей книге «С++ принципы и практика» откровенно не рекомендует использовать макроопределения из-за возможных сложностей в отладке и пр, но много лет практики на С берут свое и очень хочется сделать что-то типа

#ifndef DEBUG
#define DEBUG
    printf(...);
#endif
Но я бы не хотела включать таким образом отладочный вывод во всех методах, значит придется делать для каждого метода свой DEBUG, а потом инициализировать их перед сборкой проекта...

Хотелось бы узнать как «правильно» выводить отладочную информацию без ущерба читаемости и производительности. Гуглила логгеры и нашла просто монстров на гитхабе и в каких-то обзорах. Хотелось бы услышать мнение и инструменты кто чем пользуется

 , ,

nyka ()

Source 2: DotA 2 и SteamVR Environments в wine. Что за чертовщина?..

Что за чертовщина? Чем там valve компилировала свой движок, что wine даже не может нормально запустить бинарники? Такое впервые с wine вижу...

Пытаюсь запустить SDK инструментарий, чтобы осмотреть их движок. К удивлению, ни один из бинарников и сами игры не запускаются нормально. Например, консольная утилита dmxconvert.exe ничего не выводит и просто висит в процессах, пока не прибью. В обычном случае она должна вывести Usage в терминал и закрыться. И так с обеими играми.

Обе игры установлены в одном 64-битном префиксе. Steam в фоне с того же префикса запущен. Установка дополнительных библиотек типа vcrun* с помощью winetricks не помогла. Проверено на wine из git.

Пытался как-нибудь отладить через WINEDEBUG=+relay, чтобы посмотреть что происходит. Из вывода мало чего понял, видел только какие-то обращения к библиотекам, стандартные вызовы. Заметил, что идут обращения к api-ms-win-core-fibers-l1-1-1 и api-ms-win-core-synch-l1-2-0, у которых в wine есть пока только заглушки. Есть идеи купать копать? Как правильно по идее отлаживать софт в вайне?

Багрепорт уже есть где-то на winehq оставленный, но из штаба так никто и не обратил внимание. Сейчас вообще ссылку на репорт потерял...

Есть какая-нибудь конференция разработчиков wine (IRC, Telegram, etc.) чтобы подонимать их?

 , , , ,

xDShot ()

Как трейсить ангуляр?

Всем привет. Есть сайт на AngularJS. В JS я вообще почти ничего не понимаю, а когда попытался понять откуда на сайте одна берётся переменная, то почти сломал голову. В общем, сам вопрос - как можно трейсить ангуляр? Запустил отладку, сделал пару кликов, что-то там изменилось, остановил, смотришь как что и к чему пришло. Когда посмотрел на все эти ng-* то стало плохо. Буду очень благодарен за помощь такому незнающему нынешний веб человеку. Спасибо.

 ,

mahalaka ()

Эффективно отслеживать изменения в MySQL

Есть ли какой-нибудь проверенный способ отслеживать изменения в таблицах MySQL в больших проектах? Или подскажите, в какую сторону лучше копать.

Есть очень большой проект, с несколькими базами данных, основная из которых содержит около 500 таблиц, и с сотнями тысяч записей в некоторых таблицах.

Проект изначально был на Битрикс, потом его переносили на самописный фреймворк, сейчас по сути никто до конца не знает, какие таблицы в нём для чего предназначены.

Есть задачи по рефакторингу или написанию миграций, которые, в том числе, должны симулировать создание инфоблоков через админку. Соответственно, очень много времени уходит на то, чтобы разбираться в коде.

Соответственно, есть потребность выяснять, какая таблица обновлялась в результате определённых действий пользователя. Сначала была попытка отслеживать изменения с помощью information_schema, но большая часть таблиц inno db, значит, время внесения последних изменений через information_schema учесть нельзя, число столбцов учитывается тоже примерно. Можно, наверное, для всех таблиц пересчитывать записи с помощью count(*), но идея мне кажется не самой лучшей, как и повесить триггеры на все 500 таблиц.

У меня нет доступа к логу запросов MySQL, и меня уверяют, что он трудночитаем.

Подскажите, пожалуйста, есть ли какие-нибудь хорошие анализаторы логов mysql, либо скрипты по типу профайлера, которые бы отслеживали запросы, либо наиболее эффективные способы отладки, с помощью которых можно было бы написать, например, простой скрипт, который бы запускался,отслеживал запросы и выдавал данные об изменениях в табилце?

 , , ,

bluerosepig ()

Разбил лицо фейспалмом от openssl

Пытались отладить программу которая работает с openssl.

Вывод: разработчики openssl говнокодеры и идиоты

#1

На новых версиях valgrind он просто не может терпеть весь тот ужас что написан в openssl и вылетает сразу. Баг висит уже год в confirmed, ничего делать никто не собирается: https://bugs.launchpad.net/ubuntu/ source/valgrind/ bug/1574437

#2

Пытались сейчас отладить на другом valgrind'е. Все, что возвращается из SSL_read valgrind считает неинициализированными значениями и генерирует тысячи предупреждений. Исследовали. Оказывается что надо пересобрать openssl с флагами -DPURIFY и -DPEDANTIC, потому что *openssl использует неинициализированные значения для получения рендома*. Нашли в configure (дело под слакой) флаг purify ставящий соответствующие флаги. Сюрприз! Он конфликтует с linux-elf. ПОлезли в исходники с надеждой посмотреть сильно ли плохо будет если мы просто проставим флаг -DPURIFY. Сюрприз№2:

#ifndef PURIFY /* purify complains */
        /* DO NOT REMOVE THE FOLLOWING CALL TO MD_Update()! */
        if (!MD_Update(&m,buf,j)) 
            goto err; 
        /* We know that line may cause programs such as 
           purify and valgrind to complain about use of 
           uninitialized data.  */ 
#endif
ОНИ ЗНАЮТ, НО ИМ П***Й! ТО ЧТО ЭТО ПОДЕЛИЕ НЕ ДАЕТ ОТЛАДИТЬ ПРОГРАММУ ИМ ТОЖЕ П***Й! АААААА!!!

Выдохнул. Если что - перенесите в толксы.

 , ,

PPP328 ()

Alpine в PRoot

Пытаюсь поставить Alpine Linux (Edge) в директорию при помощи PRoot. Использую именно PRoot потому что хочу сделать установку без прав суперпользователя. Делаю так:

$ mkdir alpine
$ cp apk.static alpine
$ ./proot -S alpine /apk.static -X http://dl-cdn.alpinelinux.org/alpine/edge/main -U --allow-untrusted --initdb add alpine-base
fetch http://dl-cdn.alpinelinux.org/alpine/edge/main/x86_64/APKINDEX.tar.gz
(1/16) Installing musl (1.1.16-r15)
(2/16) Installing busybox (1.27.0-r2)
Executing busybox-1.27.0-r2.post-install
ERROR: busybox-1.27.0-r2.post-install: script exited with error 127
(3/16) Installing alpine-baselayout (3.0.4-r0)
Executing alpine-baselayout-3.0.4-r0.pre-install
ERROR: alpine-baselayout-3.0.4-r0.pre-install: script exited with error 127
Executing alpine-baselayout-3.0.4-r0.post-install
ERROR: alpine-baselayout-3.0.4-r0.post-install: script exited with error 127
(4/16) Installing openrc (0.24.1-r2)
Executing openrc-0.24.1-r2.post-install
ERROR: openrc-0.24.1-r2.post-install: script exited with error 127
(5/16) Installing alpine-conf (3.6.0-r0)
(6/16) Installing libressl2.5-libcrypto (2.5.5-r0)
(7/16) Installing libressl2.5-libssl (2.5.5-r0)
(8/16) Installing zlib (1.2.11-r0)
(9/16) Installing apk-tools (2.7.2-r0)
(10/16) Installing busybox-suid (1.27.0-r2)
(11/16) Installing busybox-initscripts (3.1-r1)
Executing busybox-initscripts-3.1-r1.post-install
ERROR: busybox-initscripts-3.1-r1.post-install: script exited with error 127
(12/16) Installing scanelf (1.2.2-r0)
(13/16) Installing musl-utils (1.1.16-r15)
(14/16) Installing libc-utils (0.7.1-r0)
(15/16) Installing alpine-keys (2.1-r1)
(16/16) Installing alpine-base (3.6.0-r0)
Executing busybox-1.27.0-r2.trigger
ERROR: busybox-1.27.0-r2.trigger: script exited with error 127
4 errors; 6 MiB in 16 packages
4 ошибки при исполнении скриптов. В скриптах всё выглядит довольно безобидно, отдельно эти скрипты выполняются успешно. Как можно отладить установку? Я попытался пересобрать пакеты, добавив в скрипты set -x, но установить из не удалось из-за проблем с цифровой подписью. Как можно легче понять, почему скрипты не работают? То же самое от рута работает нормально.

 , , ,

CYB3R ()

Вывод в консоль всех вызываемых функций по ходу выполнения программы. Есть ли такая тулза?

Чтобы подцепить её к бинарнику и чтоб она по ходу выполнения программы печатала каждую вызываемую функцию, значения аргументов и возвращаемый результат. Наподобие того, что выдаёт strace, но не для системных вызовов, а для функций внутри программы. Или может быть gdb умеет такое? Желаемое конечно можно реализовать и вручную, напихав в исходниках printf-ов, но хотелось бы чего-нибудь более автоматизированного. При наличии отладочных символов это технически вполне реализуемо

 , , , ,

Harald ()

Настройка GDB

Здравствуйте. Столкнулся с трудностями c пошаговым прохождением. Подскажите как настроить GDB таким образом, чтобы он делал остановку на каждой строке после вводе команд next, step etc... ОС linux mint 18.1

 ,

decadent69 ()

gdb, ошибка «Cannot access memory at address» когда выполняю пошаговое выполнение программы

Добрый день!

Столкнулся со следующей проблемой. Имею программу, собранную на другом компе + исходники. Есть необходимость заняться её отладкой. Указываю gdb путь до исходников, ставлю breakpoint'ы, вроде всё ок.

Начинаю пошаговое выполнение программы (n), и в определенный момент (всегда в одном и том же месте (где находится просто if)) получаю следующую ошибку: «Backtrace stopped: Cannot access memory at address 0x2e323935»

Вот что пишет bt после того как я получаю данную ошибку:

#0 0x08048310 in ?? ()
#1 0x2e383631 in ?? ()
#2 0x2e303031 in ?? ()
#3 0x30310033 in ?? ()
#4 0x00000011 in ?? ()
#5 0x00000003 in ?? ()
#6 0x09b8bc48 in ?? ()
Backtrace stopped: Cannot access memory at address 0x2e323935

Данное приложение собирается со статическими библиотеками. Для решения данной проблемы собрал самую последнюю версию gdb, а также пытался пересобрать приложение.

Сама суть заключается в том, что обращения к нулевым указателям и т.п. - нет, т.е. само приложение (без отладки) работает нормально.

Буду признателен за помощь, спасибо!

 , ,

penetrator3000 ()

Ошибка при отладке программы на C++ в Eclipse

Под Arch linux установил eclipse-cpp. Написал простую программу из двух исходников для ознакомления с IDE. Во втором файле просто функция вывода строки, переданной в качестве аргумента, в консоль.
Программа нормально компилируется и запускается, но проблема возникает при отладке. При пошаговом выполнении программы отладчик не заходит в функцию, котороая расположена во втором исходном файле, и выдаёт сообщение:

Can't find a source file at «/build/gcc/src/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/basic_string.h»
Locate the file or edit the source lookup path to include its location.

Если функция располагается в том же файле, что и main, то отладчик нормально заходит в функцию, а если в другом файле, то нет.
Нигде в сети ответа я не нашёл. Может кто-нибудь сталкивался с такой проблемой? И что за файл basic_string.h требует программа?

 , ,

RiD_32 ()