Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
ioscat
0 / 0 / 0
Регистрация: 07.05.2014
Сообщений: 44
25.07.2014, 15:49     Релиз консольной программы с SNMP запросами - найти ошибку в коде #1
Привет всем!

Я написал программку, которая опрашивает некоторые устройства используя запросы по протоколу 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ioscat
0 / 0 / 0
Регистрация: 07.05.2014
Сообщений: 44
27.07.2014, 11:26  [ТС]     Релиз консольной программы с SNMP запросами - найти ошибку в коде #2
up!

Парни, должно быть что-то простейшее же, типа залинковать что-то?
Убежденный
Системный программист
 Аватар для Убежденный
14435 / 6419 / 1015
Регистрация: 02.05.2013
Сообщений: 10,662
Завершенные тесты: 1
27.07.2014, 15:21     Релиз консольной программы с SNMP запросами - найти ошибку в коде #3
ioscat, хотите ответа - давайте подробные и осмысленные
описания ошибок. "Спотыкается" - это непонятно что.
ioscat
0 / 0 / 0
Регистрация: 07.05.2014
Сообщений: 44
28.07.2014, 06:42  [ТС]     Релиз консольной программы с SNMP запросами - найти ошибку в коде #4
ну, гм, прерывается и всё. "Программа завершена" - это сообщение высвечивается при запуске ЕХЕ из папки Release. Как получить дополнительную информацию?
Убежденный
Системный программист
 Аватар для Убежденный
14435 / 6419 / 1015
Регистрация: 02.05.2013
Сообщений: 10,662
Завершенные тесты: 1
28.07.2014, 08:58     Релиз консольной программы с SNMP запросами - найти ошибку в коде #5
Цитата Сообщение от ioscat Посмотреть сообщение
Как получить дополнительную информацию?
Для начала сделать нормальную обработку ошибок.
Ну например, в коде есть вызов SnmpMgrOpen, но не проверяется, что
он возвращает. А ведь функция может возвращать NULL, и тогда код
ошибки можно прочесть из GetLastError. Ну и т.д.
Так Вы будете хотя бы знать, в каком месте ошибка. Ну а дальше уже
можно будет разбираться почему.
ioscat
0 / 0 / 0
Регистрация: 07.05.2014
Сообщений: 44
28.07.2014, 09:35  [ТС]     Релиз консольной программы с SNMP запросами - найти ошибку в коде #6
При отладке выдаёт:
Unhandled exception at 0x7762E753 (ntdll.dll) in StrcutTry.exe: 0xC0000374: Куча была повреждена (parameters: 0x77664270).
в строке
bx=SnmpMgrRequest (SNMPSessionArr[i], SNMP_PDU_GET, &OIDvarbindlist, &errStatus, &errIndex);
Как можно получить значения ошибки из функции, если само выполнение этой функции приводит к выводу программы из строя?
castaway
Эксперт С++
4867 / 3006 / 370
Регистрация: 10.11.2010
Сообщений: 11,055
Записей в блоге: 10
Завершенные тесты: 1
28.07.2014, 10:35     Релиз консольной программы с SNMP запросами - найти ошибку в коде #7
SnmpMgrOpen что возвращает? Ты проверяешь что он возвращает не NULL ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2014, 10:40     Релиз консольной программы с SNMP запросами - найти ошибку в коде
Еще ссылки по теме:

C++ Найти ошибку в коде
Найти и устранить ошибку в коде программы, возникающую при сортировке самодельного списка C++
C++ Неожиданное поведение программы: найти ошибку в коде
C++ Вычислить и вывести значение суперпозиции функций (неожиданное поведение программы: найти ошибку в коде)
C++ Неожиданное поведение программы: исправить ошибку в коде

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

Или воспользуйтесь поиском по форуму:
ioscat
0 / 0 / 0
Регистрация: 07.05.2014
Сообщений: 44
28.07.2014, 10:40  [ТС]     Релиз консольной программы с SNMP запросами - найти ошибку в коде #8
Неа, поставлю проверку обязательно!
Спасибо за совет!
А как лучше сделать, через IF или TRY/CATCH?

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

Люди, будьте добры, подскажите, пожалуйста, правильно ли я получаю версию программы для распространения?
Она у меня всего 20 КБ, а ведь по идее надо в неё включить библиотеки, объявленные в начале... Так ведь?
Yandex
Объявления
28.07.2014, 10:40     Релиз консольной программы с SNMP запросами - найти ошибку в коде
Ответ Создать тему
Опции темы

Текущее время: 12:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru