[Delphi] Отладка DLL

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by xophet, 17 Jun 2013.

  1. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    Всем привет!
    Впервые взялся написать Dll, но возник вопрос:
    Как dll'ку отлаживать?
    Выставляю Host application, расставляю brake-поинты.
    Запускаю. Запускается Host application.
    Ни на одном брейкпоинте остановки не происходит.
    При чем сама dll'ка как мигалка на ментовской машине то работает, то не работает (при 1м запуске может заработать, а потом отказаться работать).
    Подскажите кто сталкивался?
     
  2. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    442
    Reputations:
    288
    путь к exe указал? грузиться правильно все у тебя?
     
  3. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    да, указал. Я же говорю, что Host application (exe-шник) запускается, но при этом на брейкпоинтах dll'ка не останавливается и есть подозрение, что не работает.
     
  4. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    442
    Reputations:
    288
    может не загружается экзэшником либо где то возвращает ошибку при поиске адреса?.вообще еще можешь функционал перенести в саму программу и отдебажить ее.
    хотя в таком плане еще проверяй возврат функций и ИДЕ-шный отладчик не сильно полагайся,попробуй в ольгу кинуть.
     
  5. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    Функционал отработал в проге. Потом кинул в dl.
    в ollybdg кину, заодно и поучусь с ним работать!
    Спасибо за советы, позже отпишу как оно :)
     
  6. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,309
    Reputations:
    327
    ольго - это вабще треш угар и содомия в чаде адского кутежа,

    напиши лоадер, который вызовет LoadLibrary(твоядлл), и лоадер и либу собирай в режиме Debug. далее запускай отладку лоадера.

    например так это выглядит в виндбг, тоже самое будет и в визуал студии, логика я думаю ясна - суй бряки в код дллмайна

    [​IMG]

    ежели длл не твоя, то в томже виндбг устанавливаешь фильтр на событие Load Module - Enabled - Handled

    затем bp $iment(dll_base_addr) - виндбг установит бряк на точку входа.
     
  7. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    442
    Reputations:
    288
    мэн у него делфи, в иде нет такого мода как дебаг.
    вероятнее всего грузишь не правильно.
     
  8. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,309
    Reputations:
    327
    дебаг там есть, тока дельфя для меня тёмный лес

    ап, да, у меня хе3 стоит

    а че реально в дельфях отладки раньше не было?)))
     
    #8 sn0w, 17 Jun 2013
    Last edited: 17 Jun 2013
  9. Jingo Bo

    Jingo Bo Member

    Joined:
    25 Oct 2009
    Messages:
    368
    Likes Received:
    51
    Reputations:
    7
    Кароч ставь Delph XE2(не ниже), и будет тебе радость, предыдущие версии такую отладку не поддерживают.
     
  10. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    O.O Спасибо!
     
  11. Jingo Bo

    Jingo Bo Member

    Joined:
    25 Oct 2009
    Messages:
    368
    Likes Received:
    51
    Reputations:
    7
    По точкам остановки прямо в коде не было, а вот в ассемблерном отладчике вроде можно.
     
  12. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    Что за баян? Открываешь проект с *.dll, перекидываешь свой *.exe, который вызывает функции из *.dll в папку где лежит сама *.dll. Далее Run -> Parameters... -> Host Application указываем путь до *.exe который лежит в папке с *.dll -> Ctrl+Shift+F9 и вперёд)