Jump to content
Korean Random
Pavel3333

[Решено] Самопроизвольный краш клиента при отладке пида

Recommended Posts

При работе пида клиент самопроизвольно крашится.

 

референсов на PyObject в коде практически нет, просто отлаживаю с помощью PySys_WriteStdout() функцию по преобразованию строки в структуру.

 

Иногда успевает завершиться код, иногда нет. Даже если он достигает return Py_None, клиент 100% крашится.

В коде часто используются memset/memcpy, хотя не думаю, что они на что-то влияют.

Edited by Pavel3333

Share this post


Link to post

Short link
Share on other sites

Собственно, а что мешает воткнуться в клиент той же самой Visual Studio/WinDbg/IDA и посмотреть где конкретно падает?

Edited by Mixaill

Share this post


Link to post

Short link
Share on other sites

@Mixaill пробовал присоединиться к процессу танков. Не смог. Писало что-то вроде "не поддерживается".

 

Сейчас не за компом, последнее что успел выяснить - крашится даже пустая функция с макросом Py_RETURN_NONE.

PS. В VS установлена поддержка Питона. Завтра попробую поплясать с бубном на тему отладки танкового клиента.

Share this post


Link to post

Short link
Share on other sites

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

- в Microsoft Visual Studio 2015 / 2017

- в конфигурации Release

Share this post


Link to post

Short link
Share on other sites

@Mixaill компилю в VS 2017 Community последнего обновления, конфигурация релизная. Очень похоже на неправильные свойства проекта, ибо еще вчера я работал на другом компьютере, притом все работало стабильно, а сегодня работаю уже на другом компьютере, синхронизировавшись с репозиторием. Может быть, синхронизация с репозиторием не затронула файлов решения, и из-за этого были старые параметры проекта.

 

Спасибо за совет, буду разбираться завтра.

Share this post


Link to post

Short link
Share on other sites

@Mixaill ситуация та же.

#include "stdafx.h"

#include "API_functions.h"
#include "python27/Python.h"


#define Py_BUILD_CORE 1
#define CONSOLE_VER1

PyObject* trj_get_models(PyObject* self, PyObject* args) {

	Py_INCREF(Py_None);
	return Py_None;
}

static struct PyMethodDef trj_methods[] =
{
	{ "get_models", trj_get_models, METH_VARARGS, "get_models" },
	{ NULL, NULL, 0, NULL}
};

PyDoc_STRVAR(trj_methods__doc__,
	"Trajectory Mod module"
);

PyMODINIT_FUNC inittrj(void)
{
	Py_InitModule4("trj",
		trj_methods,
		trj_methods__doc__,
		(PyObject*)NULL,
		PYTHON_API_VERSION);
};

Компилирую в VS 17, конфигурация Release. Вызываю в питоне без хука, при загрузке игры:

 

print '[TrajectoryMod]: loading module...'
trj_path = PATH.XFWLOADER_PACKAGES_REALFS+'/TrajectoryMod/native/trj.pyd'
trj = imp.load_dynamic('trj', trj_path)
print '[TrajectoryMod]: loading module OK'

print trj.get_models()

Краш.

Share this post


Link to post

Short link
Share on other sites
2 hours ago, Pavel3333 said:

#define Py_BUILD_CORE 1

такое до инклудов писать надо

2 hours ago, Pavel3333 said:

Компилирую в VS 17, конфигурация Release. Вызываю в питоне без хука, при загрузке игры:

надо вызывать после того, как xfwnative инициализуется

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites
3 часа назад, SkepticalFox сказал:
 

#define Py_BUILD_CORE 1

такое писать вообще не надо

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites
14 часов назад, SkepticalFox сказал:

надо вызывать после того, как xfwnative инициализуется

все верно. похоже, вылеты были по этой причине. не успевали дозагрузиться com.modxvm.xfw.mutex, com.modxvm.xfw.xinput, com.modxvm.xfw.console. отложеный запуск функции с задержкой 3 секунды исправил ситуацию.

Share this post


Link to post

Short link
Share on other sites

просто дерни самостоятельно 

import mod_xfw_native

 

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Или грузись через XFW и проставь зависимость от com.modxvm.xfw.native

Share this post


Link to post

Short link
Share on other sites

@Mixaill в xfw_package.json прописано:

{
    "id": "pavel3333.TrajectoryMod",
    "name": "TrajectoryMod",
    "description": "TrajectoryMod",

    "version": "4.0.0.1",
    "dependencies": ["com.modxvm.xfw.native"],
    "features": ["python", "native"],

    "url": "http://pavel3333.ru/trajectorymod/",
    "url_update": "http://pavel3333.ru/trajectorymod/",
    
    "wot_versions"         : [],
    "wot_versions_strategy": "allow_newer"
}

 

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...