<Значение, оптимизированное> в gdb проблема?

У меня есть приложение, которое только отказывает в-O2 оптимизации (скомпилированный с gcc 4.2.4). Когда я ступаю через код и добираюсь до пятна, которое отказывает, и попытайтесь осмотреть значение, я оптимизировал "значение" в gdb.

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

Спасибо!

9
задан bbazso 16 February 2010 в 16:27
поделиться

4 ответа

Это с вероятностью 99% будет ошибкой в ​​вашем коде и 1% вероятностью будет ошибкой генерации кода компилятора. Так что потратьте пропорциональное количество времени на поиск скрытых ошибок в своем коде, но имейте в виду, что вы просто могли обнаружить ошибку генерации кода (в этом случае вам нужно внимательно изучить сгенерированный компилятором код, чтобы увидеть в чем проблема).

11
ответ дан 4 December 2019 в 11:41
поделиться

Это не проблема, это скорее проблема агрессивной оптимизации в новых версиях gcc.

См .: План по исправлению отладочной информации локальной переменной в GCC .

0
ответ дан 4 December 2019 в 11:41
поделиться

Если вы можете обнаружить ошибку в потоке вашей программы, вы можете распечатать ее самостоятельно, если это как-то связано с утечками и повреждением памяти, то valgrind, вероятно, лучший друг, чем gdb.

2
ответ дан 4 December 2019 в 11:41
поделиться

Я нашел решение этой проблемы после глубокого изучения файла журнала.

Хотя я создал свой собственный профиль распространения и присвоил идентификатору 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, но есть что-то необычное, и я предлагаю вам продолжить расследование и в конечном итоге опубликовать код.

5
ответ дан 4 December 2019 в 11:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: