• XSS.stack #1 – первый литературный журнал от юзеров форума

Как дебажить без c++ exceptions, SEH, CRT?

Пожалуйста, обратите внимание, что пользователь заблокирован
Объясни подробнее. Имеешь ввиду антидебаг через setunhandledexception , или что-то другое?
 
Вопрос возник такой.

Поможет кто ответом?
Если ты про студию, то абсолютно также как и с ними, у тебя по-прежнему два вида сборки debug и release, на обоих выключено все что у тебя написано, но в настройках проекта в debug врубаешь генерацию дебаг символов, выключаешь все оптимизации и дебажишь соответственно.

Если ты про методы обработки ошибок, то обычные еррор коды и ифы, если хочешь что-то поудобнее и поэлегантнее, придется делать свой аналог std::optional или std::expected со своим мемори менеджером и своим апи менеджером.

Если ты про что-то другое, то я не знаю, потому что ты не описал чего хочешь
 
Имеется в виду обычная отладка в студии. Когда тестировал компиляцию без CRT, то не позволяло дебажить код
Вообще студия всегда позволяет дебажить код, если доступны дебаг символы, то можно будет дебажить свой код именно на плюсах или будет генериться более понятный код на ассемблере, которой также можно дебажить.
если символы недоступны, то также можно дебажить ассемблер.

Что значит не позволяла? ошибка какая то или еще что?
 
Вообще студия всегда позволяет дебажить код, если доступны дебаг символы, то можно будет дебажить свой код именно на плюсах или будет генериться более понятный код на ассемблере, которой также можно дебажить.
если символы недоступны, то также можно дебажить ассемблер.

Что значит не позволяла? ошибка какая то или еще что?
да, ошибка
 
Настроено на релиз билд, кода нет. Как нашаманить в этом проекте дебаг?

Например можно добавить код в main.cpp

int d1 = true;
d1=false;
int d2=false;

То есть поставить бряк на d2 и увидеть изменения в отладчике студии.
 

Вложения

  • CRT.zip
    3.1 КБ · Просмотры: 48
Пожалуйста, обратите внимание, что пользователь заблокирован
Когда тестировал компиляцию без CRT, то не позволяло дебажить код
Если нет CRT, чисто свой код, то действительно проще в отладчике. x64dbg может даже сорцы подтягивать (если есть pdb), будет почти как в студийном.
 
Вот ошибка в дебаг режиме
Код:
1>CRT.cpp
1>CRT.obj : error LNK2019: unresolved external symbol __RTC_CheckEsp referenced in function _main
1>CRT.obj : error LNK2001: unresolved external symbol __RTC_InitBase
1>CRT.obj : error LNK2001: unresolved external symbol __RTC_Shutdown
1>LINK : error LNK2001: unresolved external symbol _mainCRTStartup
1>C:\Users\RelaxLife\source\repos\CRT\Debug\CRT.exe : fatal error LNK1120: 4 unresolved externals

с флагом /NODEFAULTLIB
 
Ты можешь писать код с /nodefaultlib без crt и эксепшенов, а в настройках проекта в конфиге дебага все это включить, таким образом дебаг скомпилируется, как и релиз без этого всего при условии что основной код написан без зависимостей, + в дебаге сможешь использовать stl и что душе угодно чтобы легче управлять памятью и записывать какой-то вывод в файлы, только этот код надо будет обмазать #ifdef _DEBUG.

Можешь сделать по-другому, в настройках проекта или решения, не помню где точно, создать новую конфигурацию, скопировать все настройки с релиза и еще немного поднастроить, будет некий аналог конфига дебага.
В настройках поставишь predefined макрос вроде _DEBUG и еще чего тебе нужно, если нужно.
выключаешь C++ exceptions, basic run-time checks ставишь на default, ставишь no CRT, no SDL(/sdl-), disable security checks(/GS-) и скорее всего тебе придется еще выключить whole program optimization.
Оставляешь в линкере /Nodefaultlib и ставишь генерацию дебаг символов.
Ставишь в этом же режиме оптимизации на уровень /Od, чтобы код следующего вида не убирался в силу неиспользования и чтобы код не оптимизировался х#й пойми во что если ты не правильно напишешь реализацию и чтобы можно было построчно дебажить.
int a = 53;
 
Ты можешь писать код с /nodefaultlib без crt и эксепшенов, а в настройках проекта в конфиге дебага все это включить, таким образом дебаг скомпилируется, как и релиз без этого всего при условии что основной код написан без зависимостей, + в дебаге сможешь использовать stl и что душе угодно чтобы легче управлять памятью и записывать какой-то вывод в файлы, только этот код надо будет обмазать #ifdef _DEBUG.

Можешь сделать по-другому, в настройках проекта или решения, не помню где точно, создать новую конфигурацию, скопировать все настройки с релиза и еще немного поднастроить, будет некий аналог конфига дебага.
В настройках поставишь predefined макрос вроде _DEBUG и еще чего тебе нужно, если нужно.
выключаешь C++ exceptions, basic run-time checks ставишь на default, ставишь no CRT, no SDL(/sdl-), disable security checks(/GS-) и скорее всего тебе придется еще выключить whole program optimization.
Оставляешь в линкере /Nodefaultlib и ставишь генерацию дебаг символов.
Ставишь в этом же режиме оптимизации на уровень /Od, чтобы код следующего вида не убирался в силу неиспользования и чтобы код не оптимизировался х#й пойми во что если ты не правильно напишешь реализацию и чтобы можно было построчно дебажить.
int a = 53;
выше проект есть, вроде работает
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх