У меня есть приложение, которое только отказывает в-O2 оптимизации (скомпилированный с gcc 4.2.4). Когда я ступаю через код и добираюсь до пятна, которое отказывает, и попытайтесь осмотреть значение, я оптимизировал "значение" в gdb.
Я читал в Интернете, что это означает, что значение хранится в регистре. Я задавался вопросом, мог ли мой катастрофический отказ быть связан с тем, что некоторая информация помещается в регистры? Существует ли способ распечатать то, что находится в регистрах, чтобы видеть, был ли он поврежден? Существует ли способ сохранить оптимизацию, но не регистры использования?
Спасибо!
Это с вероятностью 99% будет ошибкой в вашем коде и 1% вероятностью будет ошибкой генерации кода компилятора. Так что потратьте пропорциональное количество времени на поиск скрытых ошибок в своем коде, но имейте в виду, что вы просто могли обнаружить ошибку генерации кода (в этом случае вам нужно внимательно изучить сгенерированный компилятором код, чтобы увидеть в чем проблема).
Это не проблема, это скорее проблема агрессивной оптимизации в новых версиях gcc.
См .: План по исправлению отладочной информации локальной переменной в GCC .
Если вы можете обнаружить ошибку в потоке вашей программы, вы можете распечатать ее самостоятельно, если это как-то связано с утечками и повреждением памяти, то valgrind, вероятно, лучший друг, чем gdb.
Я нашел решение этой проблемы после глубокого изучения файла журнала.
Хотя я создал свой собственный профиль распространения и присвоил идентификатору CODE SIGNING IDENTITY правильное значение для сертификата разработчика, он не дал мне ошибку: «Приложение не прошло проверку кодового дизайна».
Проблема в следующей строке:
Authority = iPhone Developer: My Name (XXXXXXXXX)
Несмотря на правильный выбор параметров проекта для профиля дистрибуции, XCode компилирует его с сертификатом разработчика.
Я наконец решил его: Щелкните правой кнопкой мыши на «Цели» - > Получить информацию - > и там он был выбран (не спрашивайте меня, почему) неправильный сертификат распространения вместо правильного.
Я исправил это, и оно, наконец, было принято.
Ссылки (вам нужна учетная запись разработчика): https://devforums.apple.com/message/147964
-121--2085943-BIT больше/отличается от того, что вы просили, но вот некоторые вещи: Предположим, что необходимо найти n-ю строку одной таблицы в определенной последовательности datetime и вставить значение из нее в другую таблицу, если ее уникальный идентификатор еще не находится в другой таблице. Получает значение из первой n-ой строки таблиц. myuniquecol - это идентификатор/col, который идентифицирует группу строк, которые имеют одно и то же значение в первой таблице, которые имеют уникальные значения mydatetime
( SELECT TOP 1 mycol FROM
( SELECT TOP 5 * FROM mytable
WHERE mytable.myuniquecol NOT IN (select myuniquecol from myothertable)
AND mytable.myuniquecol = myuniquecol
ORDER BY myuniquecol asc, mydatetime desc
) AS me
ORDER BY myuniquecol desc, mydatetime asc
) AS mycolnew
Это полезно, чтобы найти n-ю строку в одной таблице, и вставить его в качестве n-й col в другой таблице.
table1: миуникекол, микол, mydatetime
table2: миуникекол, микол1, микол2, микол3...
должен работать в любом SQL:)
ПРИМЕЧАНИЕ: mytable имеет столбец под названием mycol
EDIT: изъял некоторые вещи из-за ограничения SQL SERVER на TOP
-121--2248107- попробуйте инфо-регистры
в gdb.
Вы можете отключить оптимизацию с помощью -O0, но есть что-то необычное, и я предлагаю вам продолжить расследование и в конечном итоге опубликовать код.