Giter Club home page Giter Club logo

dll-diagnostics's Introduction

Contents

About me

I'm Dr Adam Rehn, a scientific researcher and software developer living in Cairns, Australia. I run the applied research company TensorWorks and I am actively involved in our ongoing collaboration with Epic Games. To the best of my knowledge, I am considered the world's foremost expert on Unreal Engine containers, as a result of both my role as creator and primary maintainer of the projects and initiatives listed in the Unreal Engine projects section below, and my involvement in bringing official container support to the Unreal Engine. I am passionate about automation, tooling and infrastructure, with a current focus on integrating the Unreal Engine with cloud native technologies.

You can find more details regarding my education and employment history in my curriculum vitae. I am not actively seeking new employment opportunities at the current time.

Unreal Engine projects

Community websites and educational resources

  • unrealcontainers.github.io: the source code for the Unreal Containers community hub, which acts as the central hub for developers running the Unreal Engine inside containers. The hub provides comprehensive documentation and community-curated educational resources, social links, and a list of support providers who offer professional assistance in using Unreal Engine containers.

  • ue4research.github.io: the source code for the Unreal Engine For Research ("UE4Research") project website, which provides information and community resources for academics or industry researchers who wish to use the Unreal Engine to conduct scientific research. The site includes a list of resources for getting started, a literature review of publications which cite the Unreal Engine, and a discussion of the rationale for utilising the Unreal Engine within various research use cases.

Container-related infrastructure projects

  • ue4-docker: command-line tool and accompanying Dockerfiles that provides functionality for building both Windows and Linux container images for the Unreal Engine.

  • ue4-runtime: a set of Linux container images that provide minimal, pre-configured environments for running packaged Unreal Engine projects with full GPU acceleration via the NVIDIA Container Toolkit.

Build tooling infrastructure projects

  • ue4cli: library and associated command-line tool that provides a convenient and platform-agnostic interface for working with the Unreal Engine. Commands are provided for key workflow tasks relating to Unreal projects and plugins, and for querying the details of third-party libraries that are bundled with the Unreal Engine.

  • conan-ue4cli: a plugin for ue4cli that provides functionality for integrating third-party libraries into Unreal Engine projects and plugins using the Conan C++ package management system.

  • ue4-conan-recipes: contains the default recipes that ship with conan-ue4cli. Includes recipes for a growing number of popular open source libraries and frameworks.

  • ue4-ci-helpers: a Python package designed to provide abstractions that simplify the process of writing platform-agnostic build scripts for Unreal projects and plugins, which can be run as part of Continuous Integration (CI) pipelines.

Examples and demonstrations

  • ue4-example-dockerfiles: a collection of example Dockerfiles that demonstrate various uses of Unreal Engine containers, including building projects and plugins, packaging dedicated servers, and packaging projects that use Pixel Streaming for Linux.

  • ue4-grpc-demo: an example project with accompanying Dockerfiles demonstrating how to build a simple Unreal-based microservice that uses Google's popular gRPC framework for communication, and run the microservice inside a Linux container. (Note that this demo has not yet been updated to reflect the extensive overhaul of conan-ue4cli that occurred in early 2020.)

  • ue4-opencv-demo: an old example project demonstrating how to use conan-ue4cli to build a custom OpenCV package that links against the Unreal-bundled versions of zlib and libpng, and then consume the custom-built OpenCV package in a simple Unreal project. (Note that this demo has not yet been updated to reflect the extensive overhaul of conan-ue4cli that occurred in early 2020.)

  • ue4-cloud-rendering-demo: [DEPRECATED, REPLACED BY CONTAINER SUPPORT FOR PIXEL STREAMING IN UNREAL ENGINE 4.27] An old example project with accompanying Dockerfiles that demonstrates how to use the deprecated UE4Capture plugin inside GPU-accelerated Linux containers to stream audio and video to a web browser via WebRTC. Unreal Engine 4.27 introduced an equivalent demo (which was also written by me) that uses Docker Compose to run a Pixel Streaming application in the official Unreal Engine container images.

Multimedia streaming

  • pixel-streaming-linux: this repository acts as the public issue tracker for Pixel Streaming For Linux. Note that this repository does not contain the actual source code for the Linux implementation of Pixel Streaming, which is stored in the various branches of my fork of the official Unreal Engine repository. (You will need to be logged in with a GitHub account that has been granted access to the upstream Unreal Engine repository in order to access the fork.)

  • UE4Capture: [DEPRECATED, REPLACED BY LINUX SUPPORT FOR PIXEL STREAMING IN UNREAL ENGINE 4.27] An old proof-of-concept prototype that provided a cross-platform implementation of audio and framebuffer capture, designed for use with standardised streaming protocols such as WebRTC. This plugin predated the release of Epic's official Pixel Streaming system by several months, and development was discontinued when Pixel Streaming was unveiled.

Miscellaneous projects

  • ue4-utils: a collection of assorted utilities for working with or understanding the internals of Unreal Engine 4. The most useful tool in this collection is switchfinder, which assists in identifying all of the Unreal Engine's supported command-line switches (many of which are undocumented.)

Container utilities (not specific to the Unreal Engine)

  • docker-shell: command-line tool that makes it quick and easy to start interactive shells inside both Windows and Linux containers while automatically bind-mounting the current working directory from the host system. Automatically activates common features when supported by the host system (e.g GPU acceleration) and highly configurable using Docker image labels. See the developer-images repository for examples of container images designed for use with docker-shell.

  • dll-diagnostics: command-line tool that provides functionality to assist in identifying the DLL dependencies of an application or library and diagnosing dependency loading issues. Primarily intended for use when migrating existing applications to Windows containers, where traditional GUI-based tools are unavailable.

Research-related projects

Other utilities

  • gen-invoice: library and associated command-line tool that provides a flexible, template-driven system for generating invoices and quotes in both HTML and PDF format.

  • mergetiff (Python version) and mergetiff (C++ version): libraries and associated command-line tool that provides functionality to merge raster bands from multiple GeoTiff files into a single dataset. Primarily useful when working with multispectral image data or raster bands representing per-pixel labels for training machine learning models.

dll-diagnostics's People

Contributors

adamrehn avatar sammydre avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

dll-diagnostics's Issues

Incompatible library version for dlldiag?

Hi, I'm running an exe with a specific environment variables and input arguments. I called the script like this:
python -m dlldiag graph <script_name_and_arguments>

and got this:

Traceback (most recent call last):
  File "C:\Python38\lib\runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Python38\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "C:\Python38\lib\site-packages\dlldiag\__main__.py", line 9, in <module>
    main()
  File "C:\Python38\lib\site-packages\dlldiag\main.py", line 29, in main
    subcommands[subcommand]['function']()
  File "C:\Python38\lib\site-packages\dlldiag\subcommands\graph.py", line 333, in graph
    graph = GraphHelpers.constructGraph(logEntries)
  File "C:\Python38\lib\site-packages\dlldiag\subcommands\graph.py", line 91, in constructGraph
    graph = nx.OrderedMultiDiGraph()
AttributeError: module 'networkx' has no attribute 'OrderedMultiDiGraph'

I'm running this on Python 3.8.10

ValueError: max() arg is an empty sequence with dlldiag trace

Hello,

I tried the dlldiag trace in an virtual environment, trying to analyze the python.exe:

dlldiag trace .\venv\Scripts\python.exe

But it first shows an popup (failed to set registry value)

image

and then gives following traceback:

Summary of LdrLoadDll calls:
Traceback (most recent call last):
  File "C:\myproj\python\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "C:\myproj\python\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\myproj\venv\Scripts\dlldiag.exe\__main__.py", line 9, in <module>
  File "c:\myproj\venv\lib\site-packages\dlldiag\main.py", line 29, in main
    subcommands[subcommand]['function']()
  File "c:\myproj\venv\lib\site-packages\dlldiag\subcommands\trace.py", line 247, in trace
    OutputFormatting.printRows(summary, spacing=4)
  File "c:\myproj\venv\lib\site-packages\dlldiag\common\OutputFormatting.py", line 59, in printRows
    width = max([len(row[0]) for row in rows]) + spacing
ValueError: max() arg is an empty sequence

Setup

  • Python 3.7.7rc1 32-bit (WinPython)
  • WinDbg 10.0.19041.1
  • Windows 10 64-bit
  • dll-diagnostics 0.0.3

Additional info

The

dlldiag deps .\venv\Scripts\python.exe

works fine.

The error popup comes from the dlldiag\common\WindowsDebugger.py line:

            subprocess.run(
                [
                    join(self._debuggers[architecture], "gflags.exe"),
                    "-i",
                    basename(executable),
                    "+sls",
                ],
                stdout=subprocess.DEVNULL,
                stderr=subprocess.DEVNULL,
                check=True,
            )

when the first argument for run() is

['C:\\Program Files (x86)\\Windows Kits\\10\\Debuggers\\x86\\gflags.exe',
 '-i',
 'dlldiag-helper-loadlibrary.exe',
 '+sls']

just before running the run(), the variables in the local scope and the sys.path is:

In [18]: sys.path
Out[18]:
['C:\\myproj\\venv\\Scripts\\dlldiag.exe',
 'C:\\myproj\\python\\python37.zip',
 'C:\\myproj\\python\\DLLs',
 'C:\\myproj\\python\\lib',
 'C:\\myproj\\python',
 'c:\\myproj\\venv',
 'c:\\myproj\\venv\\lib\\site-packages',
 'c:\\myproj\\venv\\lib\\site-packages\\win32',
 'c:\\myproj\\venv\\lib\\site-packages\\win32\\lib',
 'c:\\myproj\\venv\\lib\\site-packages\\Pythonwin',
 'c:\\myproj\\venv\\lib\\site-packages\\IPython\\extensions']

In [19]: args
Out[19]: ['C:\\myproj\\venv\\Scripts\\python.exe']

In [20]: executable
Out[20]: 'c:\\myproj\\venv\\lib\\site-packages\\dlldiag\\bin\\x86\\dlldiag-helper-loadlibrary.exe'

In [21]: cwd
Out[21]: 'C:\\myproj\\venv\\Scripts'

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.