Печать стека вызовов

Тема в разделе "WASM.BEGINNERS", создана пользователем MikhailKM, 4 фев 2010.

  1. MikhailKM

    MikhailKM New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2010
    Сообщения:
    18
    Пробовал.
     
  2. MikhailKM

    MikhailKM New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2010
    Сообщения:
    18
    аааа
    Нельзя править сообщение!

    С олли не работал.
    У меня свой проект, исходники под рукой, VS тоже, зачем мне олли?
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    cupuyc
    Обычно достаточно RVA адресов возврата. Но можно прикрутить отладочные символы(если свой кодес).
     
  4. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    Clerk
    ну есть, напрмер, табличка

    0x00352356
    0x00236452
    0x00436234
    0x00345623
    0x00562345
    0x00345243
    0x00401023
    0x00401000

    как этим адресам сопоставить имена функций? выискивать ручками в иде?
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    cupuyc
    Никак не сопоставлять. В большинстве случаев функция не определена по имени, её определяет именно положение в модуле, это внутренние не экспортируемые функции. Если есть в экспорте, тогда вручную.
     
  6. MikhailKM

    MikhailKM New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2010
    Сообщения:
    18
    Никто не говорит, что "достаточно вставить эту функцию в код и все ошибки сами собой будут находиться".
    Это только подспорье человеку разумному, в некоторых случаях очень помогает.

    Сейчас мой ответ таков: отладочной информации на машине клиента нет, поэтому в логе (созданном на стороне клиента) имен функций, файлов и номеров строк указано быть не может (если явно не добавили в код отладочную информацию). Получив лог придется искать в IDE руками.

    Можете предложить что-то лучше?
    Дамп не предлагать, Velheart уже озвучил. )
     
  7. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    Clerk а если я не знаю имена функций - как информация об одних только адресах поможет мне в отлоадке?
     
  8. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    MikhailKM
    как правило, программы пишутся с двумя конфигурациями: релиз и дебаг. вот дебаг версия содержин отладочную информацию, которую и стоит логировать. и как-раз таки дебаг версию ты шлёшь заказчику. а релиз он получает после оплаты.
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    cupuyc
    Эта инфа будет являться основой для дальнейшего анализа. Видимо вы отладчиком никогда не пользовались.
     
  10. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    лол што? уж тогда отключить оптимизацию и убрать дебаг инфу.
     
  11. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Разбор стека вызовов достаточно сложная тема, лучше подцепи StackWalk64 из dbghelp.dll, проще будет.
     
  12. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    cupuyc
    ?? у вас такие добрые заказчики? не только не дебаг, но еще и защищенную. просто, чтоб спать крепче.

    MikhailKM
    если речь о мсвс, то, возможно, стоит взглянуть в сторону ключей
    /Gh (Calls hook function _penter) и /GH (Calls hook function _pexit)

    связать имена с адресами можно по мап-файлу. чтоб не перепутать сборки, его можно прилагать в зашифрованном виде
     
  13. MikhailKM

    MikhailKM New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2010
    Сообщения:
    18
    Great
    Видимо так и надо сделать, функция с большими возможностями, работает и на x64, и с другими процессами и т.д.
    Хотя (имхо) для моей задачи StackWalk64 делает ровно то же, что и мой код.

    qqwe
    Как я понимаю, эти ключи следует использовать только в отладочных версиях, их применение ведет к увеличению кода и замедлению работы программы.

    Имхо, не годится.
    В map хранится адрес первой инструкции в функции, а нужно интерпретировать адрес возврата.
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Great
    Что сложного в бактрейсе ?
     
  15. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    в том-то и дело, что я знаю что такое отлаживать прогу в 10 мб под олькой. да ещё когда на одной тачке повторяется, а на другой нет.

    ++

    не понял. почему не дебаг? я имею ввиду что дебаг версия может спокойно логировать имена функций стека вызовов, н-р при исключительной ситуации или просто для проверки, логировать аргументы функций и пр. что при анализе ошибок будет значительно эффективнее, чем одни лишь адреса.
     
  16. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    cupuyc
    Я знаю каждую инструкцию в коде что скомпилел. Что вам мешает, компилятор ?
     
  17. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    если в коде ~ тысячи функций. стек вызово состоит из неск. десятков вызовов. положим, что где-то в середине этого стека был передан неверный аргумент, который был неверно вычислен при вызове другой функции. вопрос: как адреса функций стека вызово помогут локализовать ошибку (найти хотя бы функцию в которой передаётся неверный аргумент)?
    ответ: никак. нужна хотя бы печать списка значений аргументов. а чтобы не потратить добрые пол часа на поиск соответствия "адрес-имя функции", хотелось бы чтобы в лог печатался не только адрес, но ещё и имя.
     
  18. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    Пролог у функций разный делай на сишном инлайнасме и делай себе таблицу. Как тут Clerk заметил - реально:
     
  19. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    MikhailKM
    ? если у вас не отладка, то зачем вам лог? запись на диск медленнее басика (память и длинные переходы в дллю тоже не самая быстрая штука). кроме того, где вы там усмотрели настолько заметное увеличение/замедление?
    ась? оптимизаторы, бывает, превращают функци/классы в такую кашу, что только точка входа сохраняет частичную инди. вот к ней можно и привязаться. тем более, что предоставляются автоматные методы
     
  20. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    что за извращение? разве речь идёт о малваре? у меня самый обычный проект. я отсылаю его заказчику - у того что-то начинает глючить. мне нужно локализовать проблему. вы же предлагаете столь извращённые методы, что прога превращается в сплошной костыль.