# #macos #go #macos-big-sur
Вопрос:
У меня в проекте есть программа go, которая показывает очень странное поведение. Он нормально запускается из любой папки, но не из той («распаковать»), которую распаковывает мой другой код. Я сделал «cp-R» из этого каталога в «unpack2» и переименовал «распаковать» в «распаковать 1» для ясности. Вот как это выглядит:
$ ls -lR
total 0
drwxr-xr-x 3 michael staff 96 23 сен 09:36 unpack1
drwxr-xr-x 3 michael staff 96 23 сен 09:36 unpack2
./unpack1:
total 206760
-rwxr-xr-x 1 michael staff 105859154 23 сен 09:23 install
./unpack2:
total 229504
-rwxr-xr-x 1 michael staff 105859154 23 сен 00:28 install
$ unpack1/install
$ unpack2/install
[1] 34435 killed unpack2/install
$
«распаковка1/установка» запускается без проблем
«распаковка1/установка» завершается сбоем
Я дважды проверил, что оба «установить» являются одним и тем же двоичным файлом
P.S. Я использую macbook M1
Комментарии:
1. Как вы проверили, что они являются одним и тем же двоичным файлом? Вы проверили, что они хэшируют (md5, sha1 и т.д.) С одинаковым значением? Кроме того, общая длина 3-й папки больше. Похоже, что существуют некоторые дополнительные файлы, которые вы удалили из выходных данных.
2. Я использовал команду cmp для сравнения файлов. Каталоги одинаковые (ls -lasR), показывают одинаковое содержимое. Я вижу, что «общее» число отличается, но я не могу понять, в чем эта разница. папка «распаковать» (перед переименованием в «распаковать 2» была создана в коде go (ОС. Makedirs()) и «unpack1» был создан «cp-R»
3. Папка создается с помощью следующего вызова: os.MkdirAll(путь, 0755)
4. Спасибо. Я думаю, что трудно сказать что-либо полезное, основываясь на имеющейся информации. Я полагаю, что исходный код двоичных файлов недоступен (известен только тот факт, что они написаны на Go), верно? Если это так, я мог думать о двух способах изучения: 1) использовать
gdb
илиlldb
запустить двоичный файл и задать его для печати трассировки стека после Binary аварий; 2) Использованиеtruss
или DTruss или что пытаться отследить системные вызовы, сделанные двоичные файлы и попытаться сделать из бревна разница в поведении.5. У меня есть исходный код — это мой проект. Существуют ли какие-то полезные подходы к отладке в этом случае?