Похоже, что интерпретатор Python, встроенный в Gimp 2.10, использует /
в качестве разделителя пути, тогда как Gimp 2.10 использует \
в Windows.
Этот вопрос обсуждается здесь .
Создание файла с именем C:\Program Files\GIMP 2\32\lib\python2.7\sitecustomize.py
со следующим содержимым, по-видимому, решает проблему.
import sys
class Issue1542:
def __del__ (self):
if len (sys.argv[0]):
from os.path import dirname
sys.path[0:0] = [dirname (sys.argv[0])]
sys.argv = Issue1542 ()
Я уверен, что отлаживающие методы в целом независимы от языка и существует не такой думать "C отладка".
Существует много другого инструмента, который может помочь Вам найти простые проблемы как утечка памяти или просто глупые ошибки в коде, несколько раз это даже может поймать простые переполнения памяти. Но для очень трудно для нахождения проблем как проблемы порожденными из многозадачности/прерывания dma повреждение памяти единственный инструмент является мозговым и правильно написанным кодом (с размышлением заранее, что этот код будет отлажен). Можно найти больше о подготовке кода к отладке здесь. Это кажется из сообщения Sydius, тот Apache уже имеет в распоряжении хороший механизм трассировки, поэтому просто использует его и добавляет подобный Вашей кодовой базе.
В дополнительном я сказал бы, что другой важный шаг в отладке, "не принимают/думают". Основывайте все свои шаги на пустых фактах, докажите все Ваше предположение с 100%-й точностью перед Вами делающий другой шаг на основе того предположения. Базирование Вашей отладки на предположении обычно будет приносить Вам к неправильному направлению.
Редактирование после разъяснения Dave:
Вы затем ступаете, должна быть находка самая маленькая часть кода, которые вызывают проблему. Вы печальный это, если Ваш запрещать определенный раздел модуль загружается. просто сделайте этот раздел, поскольку маленький возможно, удалите/осел все в разделе, пока Вы не найдете идеально одну строку, которая заставит модуль не загружаться. И после нахождения этой строки. это будет точное время, чтобы начать использовать Ваш мозг :) Просто не забывайте к 100%, проверяют, что это - строка.
К сожалению, инструменты GNU не являются лучшими, и мой опыт состоит в том, что динамический компоновщик пачкает воды чрезвычайно. Если можно заставить Apache связываться статически с модулем, который позволит gdb особенно работать более надежно. Я не знаю, как легкий, который является; много зависит от системы сборки Apache.
Это является беспокоящим, но не шокирующим, что Вы не можете легко воспроизвести ошибку с valgrind.
Относительно компиляции с правильными флагами и valgrind и gdb дадут Вам намного лучшую информацию при компиляции всего в поле зрения с -g -O0
. Не верьте требованиям на gcc странице справочника это gcc -g -O
достаточно хорошо; это не---даже -O
заставит переменные в исходном коде быть устраненными оптимизатором.
Посмотрите снова на тот след. Какой-либо из стековых фреймов в коде, Вы управляете? Если так, что строка, и что происходит там?
Вы знаете что dlopen()
? Если не читает руководство. Если след не включает ни одного из Вас код, это может перестать работать в то время Apache
попытки загрузить Ваш код. Вы уверены, что создали модуль с правильными параметрами компилятора?
Эффективная отладка требует знания Вашей среды и инструментов. Совет Sydius хорош здесь.
Если Вы застреваете на других путях, проверьте, что можно записать, загрузиться и выполнить тривиальный модуль. Вероятно, Вы найдете пример этого почти в любой документации относительно предмета.
К разъяснению dave: Между новичком и экспертом может быть жесткое место.
Вы призываете библиотеки в незаконном коде, который Вы не используете в другом месте? Возможно, путь загрузчика испорчен только для того ресурса.
Кроме этого я примерно вне совета.Прошу прощения.
NB: у меня был случай для чтения книги David J. Agans, Отлаживающей в прошлом году. Это не конкретное программное обеспечение, но является хорошим чтением, и полезный, даже если Вы уже - довольно хороший отладчик.
То, что это приводит к сбою на dlopen () вызов, кажется немного подозреваемым мне. Существует много вещей, которые могут пойти не так, как надо при попытке открыть общий объект; но ни один из них не должен вызывать отказ seg.
Одним исключением, о котором я могу думать, является проблема в инициализации библиотеки ТАК. На той основе я предложил бы несколько вещей, Вы могли попытаться получить больше информации.
В то время как я не мог предложить очень много подсказок по отладке общей цели, я надеюсь, что что-то здесь, возможно, было полезно.
Я взглянул на valgrind документацию, и по умолчанию она не проверяет дочерние процессы. Меня вообще не удивило бы, если Apache мог бы выполнить Ваш модуль в дочернем потоке. Попробуйте
valgrind --trace-children=yes ....
Наш не студенты CS (т.е. электротехника, математика, физические студенты) я рекомендую в лекциях программирования "Практику Программирования" от Kernighan. Это хороший обеспечивает некоторые фундаментальные понятия, который помогает devlopment (как тестирование, и здесь это прибывает: отладка).
Если Вы уже - опытный программист, это является, возможно, слишком основным для Вас. Затем у меня есть просто еще одна из этой Дзэн пословицы для Вас: "Мудрость withouth проникающий опыт бесполезна".
Один ответ я могу только создать резервную копию: Посмотрите снова на отслеживание стека, это - самая соответствующая справка путем отладки (особенно там на границах, где выполнение пересекает различные модули (особенно Ваш и границы lib/ОС), и посмотрите на аргумент функции и проверки, если они нормальны).