{
WCHAR name[mdNameLen];
ULONG32 name_len = 0;
- if (SUCCEEDED(pModule->GetName(_countof(name), &name_len, name)))
- {
- return to_utf8(name/*, name_len*/);
- }
- return std::string();
+
+ if (FAILED(pModule->GetName(_countof(name), &name_len, name)))
+ return std::string();
+
+ std::string moduleName = to_utf8(name/*, name_len*/);
+
+ // On Tizen platform module path may look like /proc/self/fd/8/bin/Xamarin.Forms.Platform.dll
+ // This path is invalid in debugger process, we shoud change `self` to `<debugee process id>`
+ static const std::string selfPrefix("/proc/self/");
+
+ if (moduleName.compare(0, selfPrefix.size(), selfPrefix) != 0)
+ return moduleName;
+
+ ToRelease<ICorDebugProcess> pProcess;
+ if (FAILED(pModule->GetProcess(&pProcess)))
+ return std::string();
+
+ DWORD pid = 0;
+
+ if (FAILED(pProcess->GetID(&pid)))
+ return std::string();
+
+ std::ostringstream ss;
+ ss << "/proc/" << pid << "/" << moduleName.substr(selfPrefix.size());
+ return ss.str();
}
HRESULT Modules::GetLocationInAny(
#include <coreclrhost.h>
+#include "modules.h"
#include "platform.h"
#include "torelease.h"
#include "cputil.h"
IfFailRet(pModule->GetBaseAddress(&peAddress));
IfFailRet(pModule->GetSize(&peSize));
- ULONG32 len = 0;
- WCHAR moduleName[MAX_LONGPATH];
- IfFailRet(pModule->GetName(_countof(moduleName), &len, moduleName));
-
- return LoadSymbolsForPortablePDB(moduleName, isInMemory, isInMemory, peAddress, peSize, 0, 0);
+ return LoadSymbolsForPortablePDB(
+ Modules::GetModuleFileName(pModule),
+ isInMemory,
+ isInMemory, // isFileLayout
+ peAddress,
+ peSize,
+ 0, // inMemoryPdbAddress
+ 0 // inMemoryPdbSize
+ );
}
//
}
HRESULT SymbolReader::LoadSymbolsForPortablePDB(
- WCHAR* pModuleName,
+ const std::string &modulePath,
BOOL isInMemory,
BOOL isFileLayout,
ULONG64 peAddress,
// The module name needs to be null for in-memory PE's.
const char *szModuleName = nullptr;
- std::string moduleName;
- if (!isInMemory && pModuleName != nullptr)
+ if (!isInMemory && !modulePath.empty())
{
- moduleName = to_utf8(pModuleName);
- szModuleName = moduleName.c_str();
+ szModuleName = modulePath.c_str();
}
m_symbolReaderHandle = loadSymbolsForModuleDelegate(szModuleName, isFileLayout, peAddress,