Удаленная отладка в VB6

иначе вы можете использовать что-то вроде

Intent intX=new Intent(this, otherActivity.class);
intX.putExtra("stringextra1","value extra1");
intX.putExtra("stringextra2","value extra2"); 
intX.putExtra("stringextra_x","value extra_x");
startActivityForResult(intX, 0);

, а в классе otherActivity получить эту дополнительную строку

9
задан benPearce 5 February 2009 в 21:31
поделиться

3 ответа

Я полагаю, что при отладке в VB6, это не присоединяет к рабочему двоичному файлу, но вместо этого интерпретирует код в рамках своего собственного процесса. Поэтому Диспетчер задач и API Win32 показывают VB6.exe запущенным приложением при отладке.

Также как Вы говорите, VB6 иногда закорачивает вызовы к библиотекам COM, настолько прерывающим эти вызовы, не всегда возможно.

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

Удачи

3
ответ дан 4 December 2019 в 13:50
поделиться

Вы попробовали windbg? Просто удостоверьтесь, что у Вас есть pdb файлы для проекта.

3
ответ дан 4 December 2019 в 13:50
поделиться

Для поддержки предложения ответа Darryl Windbg - вот, сообщение в блоге 2006 года парнем Microsoft об использовании Windbg с VB6 и сообщения в блоге 2004 года другим парнем Microsoft с кратким введением в Windbg.

Править: Только сделать это полностью ясным. Windbg является свободным автономным отладчиком от Microsoft. Скомпилируйте свой VB6 EXEs, DLLs и OCXs в собственный код с символами (создайте файлы PDB), и Вы сможете отладить свое приложение ClickOnce.

Ключевая выборка из блога:

Если у Вас есть ограниченный доступ к машине сервера затем, можно использовать удаленные средства отладки WinDbg. Приложите копию WinDbg к процессу обычным способом и затем зайдите, это к серверу отладки (проверьте .server в справке WinDbg). Можно затем соединиться с ним удаленно из меню File WinDbg. Это точно так же, как будет там за исключением отсутствия шума от поклонников серверной. При отладке удаленного копия WinDbg является просто очень умным терминалом так все расширения, символы и так далее должны быть на удаленном сервере. Вы устанавливаете это тот же самый путь к любому DLL, VB6 или.NET.

Символы для Вашего компонента не загрузятся, пока Ваш компонент не делает и таким образом, необходимо позволить серверу, выполненному, по крайней мере, настолько долго. Можно вставить повреждение рано в коде VB, если Вы хотите остановить отладчик в той точке, но если Вы делаете, помните, что это остановится там каждый раз через код. Давайте предположим, что Вы позволяете ему работать и затем врываетесь. Если Вы перечисляете загруженные символы для своего модуля с "x MyModule! *", затем Вы будете видеть все свои функции вместе с большим количеством символов, связанных там для Вас. VB добавляет интерфейсы и символы вполне нагло, но Вы не должны обычно волноваться о тех. Одна вещь, которая будет, вероятно, выглядеть странной, состоит в том, что весь синтаксис класса/метода с C++ удваивает конвенцию двоеточия вместо дружественной небольшой точки. WinDbg не понимает, что VB отличается, и его рассматривают точно так же, как любой DLL с символами.

Отсюда, можно установить точки останова обычным способом (BP и т.д.) и ступить через код. Можно также открыть модули исходного кода VB и установить точки останова в них с F9, хотя расширения файла VB не находятся в выпадающем типе исходного файла. Продвижение через код является разоблачающим, но могло бы быть небольшой аварийной сигнализацией, если Вы не видели код, который VB генерирует для Вас прежде. Вы будете ступать через ассемблер и существует много липкой вещи COM там. Hresults проверяется много. Необходимо будет, вероятно, обратиться к источнику часто для разработки, где Вы - так как требуется немного практики, чтобы смочь знать то, на что был похож исходный код. Варианты особенно сложны, потому что VB делает большую работу для Вас там и что похоже на простое уравнение, может привести к большому количеству кода. Оптимизированный код еще более тверд, потому что порядок выполнения часто очень отличается от того, что Вы могли бы ожидать, и более трудно чем обычно видеть данные.

Данные не легки достигнуть этот путь. То, когда Вы смотрите на локальные переменные (dv является командой), затем, можно видеть, что переменные просто перечислены, как затмили, что означает, что память используется для чего-то еще также в течение функционального времени жизни или что имя не уникально в этом контексте. Перечисления просто показывают целыми числами или longs, и объекты показывают указателями. На самом деле они всегда были точно этим, но IDE VB скрывает это от Вас. Строками VB является COM BSTRs (и соответственно Unicode) под покрытиями, и массивы байтов являются действительно массивами символов. Вы могли бы быть удивлены обнаружить, что строки VB являются Unicode, поскольку VB, кажется, не имеет никакой поддержки ничего кроме ANSI. Это вызвано тем, что механизмом форм Ruby был ANSI только. Время выполнения преобразовывает строки Unicode в ANSI для Ruby и вызовов API, хотя существуют способы передать Unicode, если Вы хотите.

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

Можно вступить ко времени выполнения VB, если Вы хотите, но это, вероятно, не будет очень разоблачающе, при попытке отладить свое приложение. Если Вы сделаете, то Вы заметите, что внутренностями VB является очень COM, на который влияют. Влияние было на самом деле двумя путями, так как некоторые идеи COM прибыли из VB первоначально.

Можно видеть исключения при выполнении кода. Исключения нулевой ссылки (т.е. разыменование нулевого указателя) весьма распространены или что-либо для волнения о. Они обнаружатся как первые случайные исключения C000005 с 0 или почти 0 адресами. Время выполнения будет иногда делать это, если будет набор объектов к только, который безопасен, потому что единственные возможные значения являются нулевыми или допустимое значение. Вы будете также видеть исключения, если Ваш код сделает поиски в наборах, и значение не там. Поскольку исключения являются теперь столь дорогими, Вы, вероятно, не хотите делать это, если Вы можете. Другим исключением, которое Вы будете обычно видеть, является c000008f. При поиске числа затем, Вы найдете, что это - неточное исключение результата с плавающей точкой. Это используется в другом значении здесь – так как мы не генерируем реальные неточные исключения результата с плавающей точкой, они могут безопасно быть брошены для указания на ошибки VB нормального trappable типа.

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

9
ответ дан 4 December 2019 в 13:50
поделиться