Не запускается консольная программа

Что можно сделать, когда консольное приложение C ++ создает и запускает, но не запускает какой-либо код, по крайней мере, не тот, который видит отладчик? У меня есть программа с основной функцией:

int main (int argc, char *argv[])

Я ставлю точку останова на первой строке ( retval=0 ) и строка после него, чтобы быть в безопасности, и запустить. Он показывает окно консоли и зависает до тех пор, пока я не остановлю отладчик. Выходные данные отладки показывают количество загружаемых DLL, но не более того. Он заканчивается строкой, которая выглядит очень похожей на десятки:

‘fcmtsysmd.exe’ (Win32): Loaded ‘C:WindowsSysWOW64RpcRtRemote.dll’. Cannot find or open the PDB file.

Я знаю, что эта программа работает и функционирует в «нормальной» среде, потому что ее используют сотни людей, а я не изменил код. В моей среде разные вещи (потому что я переписываю наш процесс установки):

  1. У меня могут быть не все зависимости установлены правильно.
  2. Одна из зависимостей DLL, которая ранее вызывала ошибку, была заменена новой версией с изолированной ссылкой COM вместо обычной ссылки COM, потому что объект COM, к которому он пытался получить доступ, не зарегистрирован. (Я пытаюсь реализовать изолированный COM в нашей новой установке.)

Поэтому мой вопрос: если перед первой строкой кода возникает ошибка, как я могу отследить источник проблемы?

PRO100 и Cutting. Что если не работают на новых Windows?

Я не могу получить разумный стек вызовов, потому что даже если я сделаю один шаг (клавиша F10), чтобы запустить программу, она сразу же зависнет. Если я сломаюсь в этой точке, я вижу следующий стек вызовов:

Читайте также:
Что такое тестирование программы

ntdll.dll!7743fdd1() Unknown [Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll] ntdll.dll!7743fdd1() Unknown ntdll.dll!77475f86() Unknown ntdll.dll!77459809() Unknown

Когда я удаляю изолированные параметры COM из зависимой DLL, я могу получить исключение нарушения прав доступа и остановиться на некотором коде в отладчике. Он останавливается на функции, вызываемой во время инициализации статической переменной в другой DLL. Странно то, что когда я добавляю изолированные параметры COM в первую DLL и ставлю точку останова на другую DLL, точка останова даже не срабатывает.

Решение

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

Я спрошу о том, как определить источник зависшего вызова CoCreateInstance, в отдельном вопросе, если вопрос о нем еще не решен: Приложение зависло во время CoCreateInstance при использовании изолированного COM

Окончательный ответ оказался в https://stackoverflow.com/a/34076433/78162 (который я должен был создать сам).

Почему программа pro100 не запускается

Другие решения

Других решений пока нет …

Источник: web-answers.ru

Почему не запускаются консольные приложения.

На ноуте установлен GCC 4.8.1 (minGW), на персональном — GCC 5.0.1 (minGW-w64). И на том и на другом стоит Windows 7 Ultimate x64, установленная с одного диска. Скомпилировал консольное приложение на ноуте, оно не запустилось на персональном, а скомпилированное на персональном не запускается на ноуте. В обоих случаях выдает системную ошибку, отсутствует файл libgcc_s_dw2-1.dll (на ПК) и libgcc_s_seh-1.dll (на ноуте).

Читайте также:
Типы условно бесплатных программ

В чем может быть проблема? И как обеспечить переносимость приложения, чтоб исправно юзалось на форточках начиная с XP SP2 и заканчивая 7-й, как минимум?

  • Вопрос задан более трёх лет назад
  • 743 просмотра

3 комментария

Оценить 3 комментария

Источник: qna.habr.com

Не запускается консольная программа

Сообщений: 39

Не запускается консольное приложение (C++)

Вроде нормально компилиться, но не запускает консоль. Подскажите пожалуйста, в чем может быть проблема.

#include #include void gener(int mas[], int n, int fr) < int yes = 0, *masy; for(int gen = 0; gen < n; gen++) < if(mas[gen] < 0) < yes++; if(yes == 1) < masy = >else if(yes > 1) < *masy = fr; >> > > int main(int argc, char * argv []) < const int N = 5, P = 21, Q = 34; int A[N], B[N]; for(int s = 0; s < N; s++) < printf(«A[%d]: «, s + 1); if(scanf_s(«%d», fprintf(stderr, «Error! Not number for writen»); return -1; >printf(«B[%d]: «, s + 1); if(scanf_s(«%d», fprintf(stderr, «Error!

Not number for writen»); return -1; >> printf(«—————————n»); for(int p = 0; p < N; p++) < printf(«A[%d]: %dtB[%d]: %dn», p + 1, A[p], p + 1, B[p]); >printf(«—————————n»); gener(A, N, P); gener(B, N, Q); for(int pp = 0; pp < N; pp++) < printf(«A[%d]: %dtB[%d]: %dn», pp + 1, A[pp], pp + 1, B[pp]); >getch(); return 0; >
1>—— Построение начато: проект: Zadacha2, Конфигурация: Debug Win32 —— 1>Сборка начата 11.05.2014 22:19:10. 1>InitializeBuildStatus: 1> Создание «DebugZadacha2.unsuccessfulbuild», так как было задано «AlwaysCreate».

1>FinalizeBuildStatus: 1> Файл «DebugZadacha2.unsuccessfulbuild» удаляется. 1> Обращение к «DebugZadacha2.lastbuildstate». 1> 1>Сборка успешно завершена. 1> 1>Затраченное время: 00:00:00.02 ========== Построение: успешно: 1, с ошибками: 0, без изменений: 0, пропущено: 0 ==========

Источник: www.programmersforum.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru