Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
ioscat
1 / 1 / 1
Регистрация: 07.05.2014
Сообщений: 44
1

Релиз консольной программы с SNMP запросами - найти ошибку в коде

25.07.2014, 15:49. Просмотров 781. Ответов 7
Метки нет (Все метки)

Привет всем!

Я написал программку, которая опрашивает некоторые устройства используя запросы по протоколу SNMP. Программа отлично работает при Start without debugging, но её релизная версия спотыкается в самом начале, а именно при первом запросе. Прошу тыкнуть, где я мог что-то сделать неправильно?

Релизную версию получаю запуском Build->Batch build->...

Код программы:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <string>
#include <iostream>
#include <thread>
#include <Windows.h>
 
#include <iomanip>
 
#include <Mgmtapi.h>
#include <Snmp.h>
#include <SDKDDKVer.h>
#include <stdio.h>
#include <tchar.h>
#include <sstream>
#include <fstream>
#include <Winbase.h>
 
#pragma comment(lib, "Snmpapi.lib")
#pragma comment(lib, "Mgmtapi.lib")
 
using namespace std;
 
int main()
{
 
    cout << "Hello Owrld!" << "\n";
    
    LPSTR OID = ".1.3.6.1.2.1.1.1.0";
 
    SNMPAPI bx=0;
    SnmpVarBind OIDvarbind={0};
    SnmpMgrStrToOid (OID, &OIDvarbind.name);
    OIDvarbind.value.asnType = ASN_NULL;    
    cout << OIDvarbind.value.asnType << "\n";
    SnmpVarBindList OIDvarbindlist={0};
    OIDvarbindlist.len=1;
    OIDvarbindlist.list = (SnmpVarBind *) SnmpUtilMemAlloc (OIDvarbindlist.len*sizeof(SnmpVarBind));
    OIDvarbindlist.list=&OIDvarbind;
    
    int IPArraySize=5;
    LPSTR *IPArray=new LPSTR [IPArraySize];
    for (int i=0;i<IPArraySize;i++)
    {
        IPArray[i]="";
    }
    IPArray[0]="X.X.X.Y";
    IPArray[1]="X.X.X.Z";
 
 
    LPSNMP_MGR_SESSION *SNMPSessionArr = new LPSNMP_MGR_SESSION[IPArraySize];
    for(int i=0;i<IPArraySize;i++)
    {
        cout << "i is: " << i << " --> " << "IP is: " << IPArray[i] << "\n";
        
        SNMPSessionArr[i]=SnmpMgrOpen(IPArray[i], "private", 500, 0);
 
        AsnInteger errStatus = SNMP_ERRORSTATUS_NOERROR;
        AsnInteger errIndex = 0;
 
        cout << "i is: " << i << " --> " << "Gonna send request!" << "\n";
 
        bx=SnmpMgrRequest (SNMPSessionArr[i], SNMP_PDU_GET, &OIDvarbindlist, &errStatus, &errIndex);
 
        cout << "i is: " << i << " --> " << "Request sent!" << "\n";
    }
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.07.2014, 15:49
Ответы с готовыми решениями:

Найти ошибку в коде программы
Народ, посмотрите пожалуйста на код, оператор break не прекращает перебор...

Зацикливание программы, найти ошибку в коде
#define EE 1E-80 #define MAX_ROOTS 15 typedef struct { Complex root;...

Неожиданное поведение программы: найти ошибку в коде
Программа запрашивает у пользователя «Сколько Вам лет?» . Вы вводите...

Нужно найти ошибку в коде программы по нахождению площади треугольника
Вот код: #include &quot;StdAfx.h&quot; #include &lt;iostream&gt; #include &lt;math.h&gt; using...

Найти и устранить ошибку в коде программы, возникающую при сортировке самодельного списка
Доброго времени суток! Сделал сортировку, при отладке видно, что он сортирует,...

7
ioscat
1 / 1 / 1
Регистрация: 07.05.2014
Сообщений: 44
27.07.2014, 11:26  [ТС] 2
up!

Парни, должно быть что-то простейшее же, типа залинковать что-то?
0
Убежденный
Ушел с форума
Эксперт С++
16126 / 7273 / 1181
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
27.07.2014, 15:21 3
ioscat, хотите ответа - давайте подробные и осмысленные
описания ошибок. "Спотыкается" - это непонятно что.
0
ioscat
1 / 1 / 1
Регистрация: 07.05.2014
Сообщений: 44
28.07.2014, 06:42  [ТС] 4
ну, гм, прерывается и всё. "Программа завершена" - это сообщение высвечивается при запуске ЕХЕ из папки Release. Как получить дополнительную информацию?
0
Убежденный
Ушел с форума
Эксперт С++
16126 / 7273 / 1181
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
28.07.2014, 08:58 5
Цитата Сообщение от ioscat Посмотреть сообщение
Как получить дополнительную информацию?
Для начала сделать нормальную обработку ошибок.
Ну например, в коде есть вызов SnmpMgrOpen, но не проверяется, что
он возвращает. А ведь функция может возвращать NULL, и тогда код
ошибки можно прочесть из GetLastError. Ну и т.д.
Так Вы будете хотя бы знать, в каком месте ошибка. Ну а дальше уже
можно будет разбираться почему.
0
ioscat
1 / 1 / 1
Регистрация: 07.05.2014
Сообщений: 44
28.07.2014, 09:35  [ТС] 6
При отладке выдаёт:
Unhandled exception at 0x7762E753 (ntdll.dll) in StrcutTry.exe: 0xC0000374: Куча была повреждена (parameters: 0x77664270).
в строке
bx=SnmpMgrRequest (SNMPSessionArr[i], SNMP_PDU_GET, &OIDvarbindlist, &errStatus, &errIndex);
Как можно получить значения ошибки из функции, если само выполнение этой функции приводит к выводу программы из строя?
0
castaway
Эксперт С++
4934 / 3039 / 455
Регистрация: 10.11.2010
Сообщений: 11,119
Записей в блоге: 10
Завершенные тесты: 1
28.07.2014, 10:35 7
SnmpMgrOpen что возвращает? Ты проверяешь что он возвращает не NULL ?
0
ioscat
1 / 1 / 1
Регистрация: 07.05.2014
Сообщений: 44
28.07.2014, 10:40  [ТС] 8
Неа, поставлю проверку обязательно!
Спасибо за совет!
А как лучше сделать, через IF или TRY/CATCH?

-----------------
Решил проблему тем, что перенёс выделение памяти выше на несколько строк, поставил перед вот этим блоком
SNMPAPI bx=0;
SnmpVarBind OIDvarbind={0};
SnmpMgrStrToOid (OID, &OIDvarbind.name);
OIDvarbind.value.asnType = ASN_NULL;
---------------

Люди, будьте добры, подскажите, пожалуйста, правильно ли я получаю версию программы для распространения?
Она у меня всего 20 КБ, а ведь по идее надо в неё включить библиотеки, объявленные в начале... Так ведь?
0
28.07.2014, 10:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2014, 10:40

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

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

нужно исправить ошибку, кто знает какая, напишите ее в новом коде программы
нужно исправить ошибку, кто знает какая напишите ее в новом коде программы? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru