В чем разница между запуском процесса из док-станции и командной строкой в ​​OS X - PullRequest
3 голосов
/ 31 марта 2010

Я отлаживаю проблему в OS X, которая возникает, только когда приложение запускается из дока.Это не происходит, когда приложение запускается из командной строки.В чем разница между двумя сценариями?Код, с которым я работаю, представляет собой пакетный плагин на основе c ++, загружаемый в стороннее приложение.Я подключился к процессу с помощью GDB в обоих сценариях, и единственное отличие, которое я вижу, состоит в том, что в процессе загружается пара дополнительных dylib при запуске из командной строки и что базовый адрес моей библиотеки немного отличаетсядва сценария.Я попытался изменить свою связь на -prebind и / или -bind_at_load безрезультатно.

Ответы [ 4 ]

1 голос
/ 08 июня 2010

Приложение, запущенное с помощью значка Dock, не будет воспринимать те же переменные окружения, которые могут быть установлены в используемой оболочке. Если вы полагаетесь на что-то из среды, вам нужно искать другой подход. Вы получите некоторые из env-переменных, такие как PATH, HOME, LOGNAME и т. Д. Но если вы ищете HOSTTYPE, LANG, OSTYPE и др., Их не будет.

1 голос
/ 31 марта 2010

Одно важное отличие состоит в том, что исходный рабочий каталог будет отличаться в каждом случае. Приложения никогда не должны делать какие-либо предположения о рабочем каталоге и будут ломаться интересными способами, если они делают.

0 голосов
/ 14 декабря 2017

В аналогичной ситуации у меня происходит сбой при запуске из комплекта приложений. Одна возможность состоит в том, что мы используем память, которую мы уже освободили. Например. используя указатель или поле класса после free() или delete.

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

Эта ошибка может не отображаться при использовании других платформ / компиляторов (например, Linux / gcc, Windows / Visual Studio, macOS / clang из командной строки) и появляется только тогда, когда программа выполняется из пакета приложения (macOS / clang из Искатель / док).

0 голосов
/ 09 июня 2010

В этом случае моя проблема была вызвана разницей в порядке загрузки разделяемых библиотек.Одна из сторонних библиотек, которые использует наше приложение, загружает библиотеки расширений в глобальное пространство имен.Были конфликты символов с другой версией той же библиотеки.Порядок загрузки библиотек расширений в глобальный пул изменяется в зависимости от того, запущено ли приложение из документа или из командной строки.

...