Allow mono debugging and jit flags (#16)
This commit is contained in:
Родитель
c8ca462bdb
Коммит
699c6d640e
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Attach",
|
||||
"type": "mono",
|
||||
"request": "attach",
|
||||
"address": "localhost",
|
||||
"port": 5831
|
||||
}
|
||||
]
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
from typing import Dict, Optional
|
||||
from typing import Dict, Optional, Sequence
|
||||
|
||||
from .wrappers import Runtime
|
||||
from .util.find import find_libmono, find_dotnet_root
|
||||
|
@ -12,6 +12,8 @@ def get_mono(
|
|||
global_config_file: Optional[str] = None,
|
||||
libmono: Optional[str] = None,
|
||||
sgen: bool = True,
|
||||
debug: bool = False,
|
||||
jit_options: Optional[Sequence[str]] = None,
|
||||
) -> Runtime:
|
||||
from .mono import Mono
|
||||
|
||||
|
@ -20,6 +22,8 @@ def get_mono(
|
|||
|
||||
impl = Mono(
|
||||
domain=domain,
|
||||
debug=debug,
|
||||
jit_options=jit_options,
|
||||
config_file=config_file,
|
||||
global_config_file=global_config_file,
|
||||
libmono=libmono,
|
||||
|
|
|
@ -11,8 +11,19 @@ typedef struct _MonoMethodDesc MonoMethodDesc;
|
|||
typedef struct _MonoMethod MonoMethod;
|
||||
typedef struct _MonoObject MonoObject;
|
||||
|
||||
typedef enum {
|
||||
MONO_DEBUG_FORMAT_NONE,
|
||||
MONO_DEBUG_FORMAT_MONO,
|
||||
/* Deprecated, the mdb debugger is not longer supported. */
|
||||
MONO_DEBUG_FORMAT_DEBUGGER
|
||||
} MonoDebugFormat;
|
||||
|
||||
MonoDomain* mono_jit_init(const char *root_domain_name);
|
||||
void mono_jit_cleanup(MonoDomain *domain);
|
||||
void mono_jit_parse_options(int argc, char * argv[]);
|
||||
|
||||
void mono_debug_init (MonoDebugFormat format);
|
||||
|
||||
MonoAssembly* mono_domain_assembly_open(MonoDomain *domain, const char *name);
|
||||
MonoImage* mono_assembly_get_image(MonoAssembly *assembly);
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import atexit
|
||||
from typing import Optional
|
||||
from typing import Optional, Sequence
|
||||
|
||||
from .ffi import load_mono, ffi
|
||||
|
||||
|
@ -17,6 +17,8 @@ class Mono:
|
|||
libmono,
|
||||
*,
|
||||
domain=None,
|
||||
debug=False,
|
||||
jit_options: Optional[Sequence[str]] = None,
|
||||
config_file: Optional[str] = None,
|
||||
global_config_file: Optional[str] = None,
|
||||
):
|
||||
|
@ -24,6 +26,8 @@ class Mono:
|
|||
|
||||
initialize(
|
||||
config_file=config_file,
|
||||
debug=debug,
|
||||
jit_options=jit_options,
|
||||
global_config_file=global_config_file,
|
||||
libmono=libmono,
|
||||
)
|
||||
|
@ -95,6 +99,8 @@ class MonoMethod:
|
|||
|
||||
def initialize(
|
||||
libmono: str,
|
||||
debug: bool = False,
|
||||
jit_options: Optional[Sequence[str]] = None,
|
||||
config_file: Optional[str] = None,
|
||||
global_config_file: Optional[str] = None,
|
||||
) -> None:
|
||||
|
@ -113,6 +119,13 @@ def initialize(
|
|||
|
||||
config_encoded = config_file.encode("utf8")
|
||||
|
||||
if jit_options:
|
||||
options = [ffi.new("char[]", o.encode("utf8")) for o in jit_options]
|
||||
_MONO.mono_jit_parse_options(len(options), options)
|
||||
|
||||
if debug:
|
||||
_MONO.mono_debug_init(_MONO.MONO_DEBUG_FORMAT_MONO)
|
||||
|
||||
_ROOT_DOMAIN = _MONO.mono_jit_init(b"clr_loader")
|
||||
_MONO.mono_domain_set_config(_ROOT_DOMAIN, b".", config_encoded)
|
||||
_check_result(_ROOT_DOMAIN, "Failed to initialize Mono")
|
||||
|
|
|
@ -32,6 +32,20 @@ def test_mono(example_netstandard):
|
|||
run_tests(asm)
|
||||
|
||||
|
||||
def test_mono_debug(example_netstandard):
|
||||
from clr_loader import get_mono
|
||||
|
||||
mono = get_mono(
|
||||
debug=True,
|
||||
jit_options=[
|
||||
"--debugger-agent=address=0.0.0.0:5831,transport=dt_socket,server=y"
|
||||
],
|
||||
)
|
||||
asm = mono.get_assembly(os.path.join(example_netstandard, "example.dll"))
|
||||
|
||||
run_tests(asm)
|
||||
|
||||
|
||||
def test_coreclr(example_netcore):
|
||||
from clr_loader import get_coreclr
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче